プライマリ・コンテンツに移動

Oracle® Data Provider for .NET開発者ガイド ODAC 12.2c リリース1 (12.2.0.1) for Microsoft Windows E88311-03 |
| 目次 | 索引

前 | 次 |

# 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メソッドは比較可能です。使用方法を示したコード例は、例を参照してください。

関連項目:

- Oracle.DataAccess.ClientおよびOracle.ManagedDataAccess.Clientのネームスペース

- OracleDataReaderクラス

- OracleDataReaderメンバー

- LOBサポート