Es ist möglich, eine autonome Transaktion zu verwenden.
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));
Führen Sie dann dieses anonyme PL/SQL aus. Schauen Sie genau hin, die lokale Prozedur upd_table_3
wird nicht ausgeführt, wenn es deklariert ist. Es wird ausgeführt, wenn es innerhalb des Haupt-BEGIN
aufgerufen wird blockieren:
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;
/
Die Prozedur sollte absichtlich beim 4. Einfügen mit ORA-02291
fehlschlagen . Ich habe es so gemacht. Dann
ROLLBACK;
Alle Tabellen außer t3
sollten zurückgesetzt werden , die wir in einer autonomen Transaktion eingefügt haben.
SELECT * FROM t1;
no rows selected
SELECT * FROM t2;
no rows selected
SELECT * FROM t3;
X
----------
3
SELECT * FROM t4;
no rows selected