カーソルのロックのルール
- カーソルが関係するアクションはすべて、単一のトランザクションの中で実行しなければならない。
- トランザクションが終了すると、開いているカーソルがすべて閉じられる。
ロック レベルと位置決めされたカーソル
SELECTリクエストの関連するカーソルがオープンされたとき実行されたそのSELECTリクエストによって、Teradata Databaseは、SELECTリクエストの制約句に従って、デフォルトによるテーブル レベルかまたは行ハッシュ レベルのロックを使用するようになります。
このロック レベルをLOCKINGリクエスト修飾子を使用して明示的に変更することができます。更新可能なカーソルにLOCKINGリクエスト修飾子がサポートされています。CHECKSUMロックの重大度は特にLOCKING用に設計されています。
カーソルとロック間の相互作用
カーソルがオープンされると、Teradata Databaseにより応答スプールが生成されます。このスプールは、スプールの行の中の応答データのソースである各データ行を識別します。
Teradata Databaseはこの識別子を使用して、アプリケーションがそのようなアクションをWHERE CURRENT OF cursor_nameに対して指定するときに、データ行をUPDATEまたはDELETEします。
LOCKING修飾子 | Teradata Databaseの動作 |
---|---|
ACCESS | スプールの応答データが生成されたあとで、更新または削除されるデータ行が変更されていないことの確認は行ないません。 他のアプリケーションが元のソース行を削除して、そこに新しい行を挿入した場合には、対象となるデータ行は、完全に新しい行となる。 |
CHECKSUM | スプールの各行にチェックサムを挿入する。 これは、カーソルを介して更新が行なわれるときに、別のユーザーかセッションによってスプール内の行が変更されていないことを確認する機構である。 CHECKSUMオプションは、すべての矛盾が検出されることを保証しているわけではないことに注意してください。更新によって作成された行のチェックサムが元の変更されていない行のチェックサムと同じになる可能性が、小さいが必ずある。 CHECKSUMオプションは、ACCESS重大度のロックを使用する。CHECKSUMロックは、スプールの行のチェックサムも提供するという点で異なっている。 |
カーソル ロックの簡単な例
この例では、table_1でCHECKSUM付きのLOCKINGを使用しています。
EXEC SQL REPLACE macro macro_2 AS (LOCKING TABLE table_1 FOR CHECKSUM SELECT i, text FROM table_1);
ロックとカーソルの完全な例については、<Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL、B035-1148>を参照してください。