自律型トランザクションを利用する(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を発行してしまっているので、 |