SAVEPOINT¶
Name
SAVEPOINT -- は、現在のトランザクション内で新しいセーブポイントを定義します
Synopsis
SAVEPOINT <savepoint_name>
Description
SAVEPOINT は、現在のトランザクション内に新しいセーブポイントを確立します。
セーブポイントは、トランザクション内の特別なマークであり、確立後に実行されたすべてのコマンドをロールバックし、トランザクションの状態をセーブポイントの時点の状態に復元できます。
Parameters
savepoint_name
セーブポイントに付けられる名前。
Notes
ROLLBACK TO SAVEPOINT を使用して、セーブポイントにロールバックします。
セーブポイントは、トランザクションブロック内でのみ確立できます。トランザクション内で複数のセーブポイントを定義できます。
前のセーブポイントと同じ名前で別のセーブポイントが確立されると、古いセーブポイントが保持されますが、ロールバック時には最新のセーブポイントのみが使用されます。
SAVEPOINT はSPLプログラム内ではサポートされていません。
Examples
セーブポイントを確立し、その後、確立後に実行されたすべてのコマンドの効果を元に戻すには:
\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 および jobhist テーブルへの挿入はロールバックされます。
See Also