6.8.4.30 GetOracleClobForUpdate(int, int)
このメソッドはWAIT
句を使用して、指定されたCLOB
列の更新可能なOracleClob
オブジェクトを戻します。
宣言
// C# public OracleClob GetOracleClobForUpdate(int index, int wait);
パラメータ
-
index
ゼロベースの列索引です。
-
wait
メソッドがロックを取得するまで待機する秒数
戻り値
更新可能なOracleClob
。
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
OracleCommand
のExecuteReader()
メソッドを起動する場合、OracleDataReader
によってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleClobForUpdate()
メソッドではデータベース・ラウンドトリップを発生させ、現行のCLOB
データに対する参照を取得する一方、FOR
UPDATE
句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleClob()
から取得したOracleClob
には、GetOracleClobForUpdate()
から取得したOracleClob
とは異なる値を含めることができます。
このメソッドを内部で起動すると、行をロックするSELECT..FOR UPDATE
文が実行されます。
このメソッドをコール後にCLOB
列はロックされるため、戻されたOracleClob
オブジェクトを使用して、CLOB
を安全に更新できます。
文には、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
の文末に何も追加されていない場合。文はロックが取得されるまで無期限に待機して実行されます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
例
GetOracleClobForUpdateメソッドは比較可能です。使用方法を示したコード例は、例を参照してください。