SQL終了文とカーソル
- COMMITは、オープンしたすべてのカーソルを終了させ、トランザクションの進行中にカーソルによって加えられた変更をコミットします。(ANSIセッション モードのみ)。
- ROLLBACK (ANSIモードおよびTeradataセッション モード)またはABORT (Teradataセッション モードのみ)は、現在のトランザクション内のすべてのオープンしたカーソルを終了させ、トランザクションの進行中にカーソルによって加えられたすべての変更を破棄します。
- END TRANSACTIONは、現在のトランザクション内のすべてのオープンしたカーソルを終了させ、トランザクションの進行中にカーソルによって加えられたすべての変更をコミットします(Teradataセッション モードのみ)。
暗黙的トランザクションのカーソルの意味
暗黙的トランザクションの場合(Teradataセッション モードで開かれたカーソルのみ):
- FOR CURSORループは保持可能カーソルとしてカーソルを開き、感度は準センシティブになります。
- また、FOR CURSORループはトランザクション制御文をサポートします。
- DECLARE、OPEN、またはFETCH CURSORの場合、カーソルは保持可能で、感度は準センシティブです。
明示的トランザクションのカーソルの意味
明示的トランザクションの場合(TeradataモードまたはANSIセッション モードで開かれたカーソル):
- FOR CURSORループは保持なしカーソルとしてカーソルを開き、感度は準センシティブになります。つまり、トランザクションが閉じると、カーソルも閉じます。カーソルが準センシティブであれば、SQLデータの意味のある変更内容の可視性はインプリメンテーションに依存します。
- FOR CURSORループの場合、COMMIT、ROLLBACK、またはABORTをFORループ内で使用できません。システムがコンパイル時にCOMMIT、ROLLBACK、またはABORTを検出すると、エラーが返されて、ストアド プロシージャは作成されません。
システムがコンパイル時にCOMMIT、ROLLBACK、またはABORTを検出しなかった場合、実行時エラーが返されます。これはTeradataセッション モードの失敗であり、システムによってトランザクションとカーソルが閉じられます。
Teradataセッション モードのネストされた呼び出しの中でROLLBACKまたはABORTが発生した場合、システムによってネストされた呼び出しが失敗したと報告されます。さらに、この失敗は後続のFETCH CURSORにも適用されます。
- DECLARE、OPEN、またはFETCH CURSORの場合、カーソルは保持なしで、感度は準センシティブです。トランザクション制御文はシステムによって正常に実行されますが、次のFETCHまたはCLOSE CURSORでシステムはエラーを返します。
カーソルの保持可能性とトランザクションおよびセッションの終了
- COMMITでトランザクションが終了しても、システムが保持可能カーソルを閉じることはありません(そのカーソルが開いている場合)。
- トランザクション終了時に閉じられている保持可能カーソルは、閉じられたままです。
- ROLLBACKでトランザクションが終了すると、システムが保持可能カーソルを閉じます。
- 保持可能カーソルを作成したセッションが終了したときは、システムがそのカーソルを閉じて破棄します。
- 保持なしカーソルを作成したトランザクションが終了したときは、システムがそのカーソルを閉じます。
カーソルの感度
カーソルが開かれていて、そのカーソルを開いたトランザクションでデータに意味ある変更が加えられた場合、カーソルを閉じる前に変更内容をそのカーソルで表示できるようにするかどうかは、以下のようにシステムによって決定されます。
- カーソルが準センシティブの場合、データの意味のある変更内容の可視性はインプリメンテーションに依存します。
- カーソルが非センシティブの場合、データの意味のある変更内容は表示されません。
- カーソルがセンシティブの場合、データの意味のある変更内容は表示されます。