6.11.4.26 GetOracleBlobForUpdate(int, int)
このメソッドはWAIT
句を使用して、指定されたBLOB
列の更新可能なOracleBlob
オブジェクトを戻します。
宣言
// C# public OracleBlob GetOracleBlobForUpdate(int index, int wait);
パラメータ
-
index
ゼロベースの列索引です。
-
wait
メソッドがロックを取得するまで待機する秒数
戻り値
更新可能なOracleBlob
オブジェクト
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
OracleCommand
のExecuteReader()
メソッドを起動する場合、OracleDataReader
によってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleBlobForUpdate()
メソッドではデータベース・ラウンドトリップを発生させ、現行のBLOB
データに対する参照を取得する一方、FOR
UPDATE
句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleBlob()
から取得したOracleBlob
には、GetOracleBlobForUpdate()
から取得したOracleBlob
とは異なる値を含めることができます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドをコール後にBLOB
列はロックされるため、戻されたOracleBlob
オブジェクトを使用して、BLOB
を安全に更新できます。
このメソッドを内部で起動すると、行をロックするSELECT..FOR UPDATE
文が実行されます。
文には、wait
値に応じて、別のWAIT
句を追加できます。次のwait
値の場合は、次のとおりにします。
-
0
SELECT..FOR
UPDATE
文の文末に"NOWAIT
" が追加されている場合。ロックを取得済かどうかに関係なく、文はただちに実行されます。ロックが取得されていない場合は、例外がスローされます。 -
n
SELECT..FOR
UPDATE
文の文末に"WAIT
n
" が追加されている場合。文はロックを取得後ただちに実行されます。ロックがn
秒で取得できない場合は、このメソッド・コールに例外がスローされます。「
WAIT
n
」機能は、Oracle9i以降でのみ使用可能です。Oracle9iより前のバージョンの場合は、n
が暗黙的に-1
として処理され、SELECT..FOR
UPDATE
文の文末には何も追加されません。 -
-1
SELECT..FOR
UPDATE
の文末に何も追加されていない場合。文はロックが取得されるまで無期限に待機して実行されます。
例
GetOracleBlobForUpdate
メソッドは比較可能です。使用方法を示したコード例は、例を参照してください。