現在のトランザクションで新しいセーブポイントを定義します。

構文

SAVEPOINT savepoint_name

説明

SAVEPOINT コマンドは、現在のトランザクションに新しいセーブポイントを作成します。

セーブポイントは、トランザクションの特別なマークです。 作成後に実行されるすべてのコマンドをロールバックすることができます。 コマンドがロールバックされると、トランザクションの状態はセーブポイント時点の状態に復元されます。

パラメーター

パラメーター 説明
savepoint_name セーブポイントに指定する名前。

説明

ROLLBACK TO SAVEPOINT コマンドを実行して、セーブポイントにロールバックします。

セーブポイントは、トランザクションブロックでのみ作成することができます。 トランザクションで複数のセーブポイントを定義することができます。

以前のセーブポイントと同じ名前の別のセーブポイントが作成された場合は、以前のセーブポイントが保持されます。 ただし、ロールバック時には、最新のセーブポイントのみが使用されます。

SAVEPOINT コマンドは、SPL プログラム内ではサポートされていません。

次の例は、セーブポイントを作成し、セーブポイントの作成後に実行されたすべてのコマンドを元に戻す方法を示しています。

\set AUTOCOMMIT off
INSERT INTO dept VALUES (50, 'HR', 'NEW YORK');
SAVEPOINT depts;
INSERT INTO emp (empno, ename, deptno) VALUES (9001, 'JONES', 50);
INSERT INTO emp (empno, ename, deptno) VALUES (9002, 'ALICE', 50);
SAVEPOINT emps;
INSERT INTO jobhist VALUES (9001,'17-SEP-07',NULL,'CLERK',800,NULL,50,'New Hire');
INSERT INTO jobhist VALUES (9002,'20-SEP-07',NULL,'CLERK',700,NULL,50,'New Hire');
ROLLBACK TO depts;
COMMIT;

前述のトランザクションは、dept テーブルに行を送信しますが、emp テーブルと joblist テーブルに挿入された内容はロールバックされます。