自律トランザクションを使用して可能です。
CREATE TABLE t1 (x INTEGER PRIMARY KEY);
CREATE TABLE t2 (x INTEGER);
CREATE TABLE t3 (x INTEGER);
CREATE TABLE t4 (x INTEGER REFERENCES t1(x));
次に、この匿名のPL/SQLを実行します。ローカルプロシージャupd_table_3
を注意深く見てください。 宣言されたときに実行されません。メインのBEGIN
内で呼び出されたときに実行されます ブロック:
DECLARE
PROCEDURE upd_table_3 IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO t3 VALUES (3);
COMMIT;
END;
BEGIN
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (2);
upd_table_3;
INSERT INTO t4 VALUES (4);
COMMIT;
END;
/
この手順は、ORA-02291
を使用した4番目の挿入で意図的に失敗するはずです。 。私はこのようにそれを作りました。次に
ROLLBACK;
t3
を除くすべてのテーブルをロールバックする必要があります 、自律トランザクションで挿入を行いました。
SELECT * FROM t1;
no rows selected
SELECT * FROM t2;
no rows selected
SELECT * FROM t3;
X
----------
3
SELECT * FROM t4;
no rows selected