SET CONCURRENCY 文では、カーソルの並行オプションが設定されます。
注:
>>--EXEC SQL--SET CONCURRENCY--.-READONLY-.---END-EXEC-->< +-LOCKCC---+ +-OPTCC----+ +-OPTCCVAL-+
READONLY | 読み取り専用のカーソルを指定します。 データは変更できません。 |
LOCKCC | 各行を取り込むときにその行を含むデータページに更新用ロックを設定します。 開いたトランザクション以外の場合は、FETCH を次に実行するときにロックが解除されます。 開いたトランザクション内の場合は、トランザクションを閉じたときにロックが解除されます。 |
OPTCC | タイムスタンプまたは値を使用したオプティミスティック並行制御。 カーソルによる行の変更は、前回の FETCH の実行から行が変更されていない場合に限り正常に実行されます。 タイムスタンプの比較、または (タイムスタンプがない場合) テキストとイメージを除くすべての値の比較によって、変更が検出されます。 |
OPTCCVAL | 値を使用したオプティミスティック並行制御。 カーソルによる行の変更は、前回の FETCH の実行から行が変更されていない場合に限り正常に実行されます。 テキストとイメージを除くすべての値が比較され、変更が検出されます。 |
次の場合を除いて、デフォルトは LOCKCC です。
ODBC ドライバでサポートされていないオプションを設定した場合は、エラー (-19512) が発生します。
注: Microsoft Access ドライバを使用している場合は、CONCURRENCY はデフォルトで READONLY に設定されます。 Microsoft Access で更新可能なカーソルを使用する場合は、SQL(USECURLIB=YES) 指令でコンパイルし、SCROLLOPTION STATIC および CONCURRENCY OPTCCVAL (または OPTIMISTIC) を設定する必要があります。
前回 FETCH 文を実行した後に行が変更されている場合に OPTCC または OPTCCVAL オプションを使用すると、UPDATE WHERE CURRENT OF 文が失敗し、SQLCODE の値 が -532 (SQLSTATE = "01001") に設定されます。 この状況に対処するコードをアプリケーションに含める必要があります。
EXEC SQL SET CONCURRENCY READONLY END-EXEC