एक स्वायत्त लेनदेन का उपयोग करना संभव है।
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
. के साथ चौथे इंसर्ट पर प्रक्रिया जानबूझकर विफल होनी चाहिए . मैंने इसे इस तरह बनाया। फिर
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