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値の場合は、次のとおりにします。
-
0SELECT..FOR UPDATE文の文末に"NOWAIT" が追加されている場合。ロックを取得済かどうかに関係なく、文はただちに実行されます。ロックが取得されていない場合は、例外がスローされます。 -
nSELECT..FOR UPDATE文の文末に"WAITn" が追加されている場合。文はロックを取得後ただちに実行されます。ロックがn秒で取得できない場合は、このメソッド・コールに例外がスローされます。「
WAITn」機能は、Oracle9i以降でのみ使用可能です。Oracle9iより前のバージョンの場合は、nが暗黙的に-1として処理され、SELECT..FORUPDATE文の文末には何も追加されません。 -
-1SELECT..FOR UPDATEの文末に何も追加されていない場合。文はロックが取得されるまで無期限に待機して実行されます。
このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。
例
GetOracleClobForUpdateメソッドは比較可能です。使用方法を示したコード例は、例を参照してください。