DB2 Version 9.7 for Linux, UNIX, and Windows

SAVEPOINT ステートメント

SAVEPOINT ステートメントを使用して、トランザクション内にセーブポイントを設定します。

呼び出し

このステートメントは、 アプリケーション・プログラム (プロシージャーを含む) に組み込むこともでき、 対話式に発行することもできます。 このステートメントは、動的に作成できる実行可能ステートメントです。

許可

必要ありません。

構文

構文図を読む構文図をスキップする
>>-SAVEPOINT--savepoint-name--+--------+------------------------>
                              '-UNIQUE-'   

                               .-ON ROLLBACK RETAIN LOCKS-.   
>--ON ROLLBACK RETAIN CURSORS--+--------------------------+----><

説明

savepoint-name
セーブポイントの名前を指定します。 savepoint-name を指定する際に、SYS で始めることはできません (SQLSTATE 42939)。 同じ名前のセーブポイントがこのセーブポイント・レベル内で UNIQUE として既に定義されている場合、 エラーが戻されます (SQLSTATE 3B501)。
UNIQUE
セーブポイントが現行セーブポイント・レベル内でアクティブな間、 このセーブポイントの名前がアプリケーションによって再使用されないことを指定します。 savepoint-name がこのセーブポイント・レベル内に既に存在していると、 エラーが戻されます (SQLSTATE 3B501)。
ON ROLLBACK RETAIN CURSORS
SAVEPOINT ステートメントの後に処理されるオープン・カーソルのステートメントに関して、 このセーブポイントへのロールバックでのシステムの動作を指定します。 この節は可能な限り、セーブポイントへのロールバックによる影響を受けないことを示します。 どのような場合にカーソルがセーブポイントへのロールバックから影響を受けるかについては、 「ROLLBACK」を参照してください。
ON ROLLBACK RETAIN LOCKS
セーブポイントの設定後にかけられるロックに関して、 このセーブポイントへのロールバックでのシステムの動作を指定します。 このセーブポイント以降に獲得したロックは追跡されず、 このセーブポイントへのロールバック時にはロールバック (解放) されません。

規則

例 1: ネストされたセーブポイントに対してロールバック操作を実行します。 まず、DEPARTMENT という名前の表を作成します。 SAVEPOINT1 を開始する前に 1 行挿入し、 SAVEPOINT2 を開始する前にもう 1 行挿入し、 SAVEPOINT3 を開始する前にさらにもう 1 行挿入します。
   CREATE TABLE DEPARTMENT (
     DEPTNO   CHAR(6),
     DEPTNAME VARCHAR(20),
     MGRNO    INTEGER)

     INSERT INTO DEPARTMENT VALUES ('A20', 'MARKETING', 301)

     SAVEPOINT SAVEPOINT1 ON ROLLBACK RETAIN CURSORS

     INSERT INTO DEPARTMENT VALUES ('B30', 'FINANCE', 520)

     SAVEPOINT SAVEPOINT2 ON ROLLBACK RETAIN CURSORS

     INSERT INTO DEPARTMENT VALUES ('C40', 'IT SUPPORT', 430)

     SAVEPOINT SAVEPOINT3 ON ROLLBACK RETAIN CURSORS

     INSERT INTO DEPARTMENT VALUES ('R50', 'RESEARCH', 150)
この時点で、DEPARTMENT 表には A20、B30、C40、および R50 という行があります。 そして、次のステートメントを出すと、
   ROLLBACK TO SAVEPOINT SAVEPOINT3
行 R50 が DEPARTMENT 表からなくなります。 そして、次のステートメントを出すと、
   ROLLBACK TO SAVEPOINT SAVEPOINT1
DEPARTMENT 表は残っていますが、 SAVEPOINT1 を設定した後に挿入した行 (B30 と C40) が表からなくなります。