Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere でのプログラミングの概要 » アプリケーションでの SQL の使用 » カーソルを使用した操作

 

更新可能な文の概要

この項では、SELECT 文の句が更新可能な文とカーソルに与える影響について説明します。

読み込み専用文の更新可能性

カーソル宣言で FOR READ ONLY を指定するか、FOR READ ONLY 句を文に含めると、文は読み込み専用になります。FOR READ ONLY 句を指定するか、クライアント API を使用している場合に読み込み専用カーソルを宣言すると、その他の更新可能性の指定は上書きされます。

SELECT 文の最も外側のブロックに ORDER BY 句が含まれている場合、文で FOR UPDATE を指定しないと、カーソルは READ ONLY になります。SQL の SELECT 文で FOR XML を指定すると、カーソルは READ ONLY になります。それ以外の場合、カーソルは更新可能です。

更新可能な文と同時制御

更新可能な文の場合、SQL Anywhere にはカーソルに対してオプティミスティックとペシミスティックの両方の同時制御メカニズムがあり、スクロール操作中の結果セットの一貫性が保たれます。これらのメカニズムは、セマンティックとトレードオフは異なりますが、INSENSITIVE カーソルやスナップショット・アイソレーションに代わる方法です。

FOR UPDATE の指定は、カーソルの更新可能性に影響する場合があります。ただし SQL Anywhere では、FOR UPDATE 構文は同時制御に対するその他の影響はありません。FOR UPDATE で追加のパラメータを指定すると、SQL Anywhere では次の 2 つの同時制御オプションのいずれかを組み込むように文の処理が変更されます。

  • ペシミスティック   カーソルの結果セットにフェッチされたすべてのローに対して、データベース・サーバは意図的ロー・ロックを取得して、別のトランザクションによってローが更新されないようにします。

  • オプティミスティック   データベース・サーバで使用されるカーソルのタイプがキーセット駆動型カーソル (insensitive ロー・メンバシップ、value-sensitive) に変えられ、結果内のローが任意のトランザクションによって変更または削除されると、アプリケーションに通知されるようになります。

ペシミスティックまたはオプティミスティック同時実行性は、DECLARE CURSOR 文または FOR 文のオプション、または特定のプログラミング・インタフェースの同時実行性設定 API を使用して、カーソル・レベルで指定します。文が更新可能でカーソルに同時制御メカニズムが指定されていない場合は、文の仕様が使用されます。構文は次のとおりです。

  • FOR UPDATE BY LOCK   データベース・サーバは、結果セットのフェッチされたローに対する意図的ロー・ロックを取得します。これは、トランザクションが COMMIT または ROLLBACK されるまで保持される長時間のロックです。

  • FOR UPDATE BY { VALUES | TIMESTAMP }   データベース・サーバは、キーセット駆動型カーソルを使用して、結果セットをスクロールしているときにローが変更または削除された場合にアプリケーションが通知されるようにします。

詳細については、DECLARE 文FOR 文を参照してください。

更新可能な文の制限

FOR UPDATE ( column-list ) を指定すると、後続の UPDATE WHERE CURRENT OF 文では指定された結果セットの属性のみ変更できるよう制限されます。