自律型トランザクションを利用する(Oracleメモ) †PRAGMA AUTONOMOUS_TRANSACTION を使用すると (1)前準備 CREATE TABLE T_TEST1 (COL1 VARCHAR2(10)); CREATE TABLE T_TEST2 (COL1 VARCHAR2(10)); (2)自律型トランザクションのプロシージャを作成 CREATE OR REPLACE PROCEDURE TEST_PROC AS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO T_TEST1(COL1) VALUES ('TEST'); EXECUTE IMMEDIATE 'ALTER TABLE T_TEST MODIFY COL1 VARCHAR2(30)'; ROLLBACK; END; / (3)メイン処理の実行(TEST_PROCプロシージャの呼び出し) DECLARE COL1 VARCHAR2(10); BEGIN DBMS_OUTPUT.PUT_LINE('-- START --'); INSERT INTO T_TEST2(COL1) VALUES ('TEST'); TEST_PROC(); ROLLBACK; DBMS_OUTPUT.PUT_LINE('-- END --'); END; / (4)テーブルの内容を確認 SELECT COUNT(*) FROM T_TEST1; SELECT COUNT(*) FROM T_TEST2; @orcl> SELECT COUNT(*) FROM T_TEST1; COUNT(*) ---------- 1 @orcl> SELECT COUNT(*) FROM T_TEST2; COUNT(*) ---------- 0 TEST_PROCプロシージャ内でDDLを発行してしまっているので、 |