Có thể sử dụng Giao dịch tự trị.
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));
Sau đó chạy PL / SQL ẩn danh này. Xem kỹ, thủ tục cục bộ upd_table_3
không chạy khi nó được khai báo. Nó chạy khi được gọi trong BEGIN
chính khối:
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;
/
Quy trình sẽ cố ý không thành công ở lần chèn thứ 4 với ORA-02291
. Tôi đã làm theo cách này. Sau đó
ROLLBACK;
Tất cả các bảng phải được khôi phục lại ngoại trừ t3
, mà chúng tôi đã chèn trong một giao dịch tự trị.
SELECT * FROM t1;
no rows selected
SELECT * FROM t2;
no rows selected
SELECT * FROM t3;
X
----------
3
SELECT * FROM t4;
no rows selected