DDL文を実行すると暗黙的なCommitが発行される。
なので、以下のようにストアドの中でTruncateなどのDDL文が実行されるような場合、
DDL文の発行と同時にCommitが発行されるので、その点を注意する必要がある。
harada_lab2.sql
CREATE OR REPLACE FUNCTION HARADA_LAB2 (Pa_Message OUT VARCHAR2 ) RETURN NUMBER AS USER_ABEND EXCEPTION; BEGIN --※1でRollbackしてもここでの更新はコミットされる UPDATE WK_TABLE_2 SET USER_NAME ='HARADA-COMMIT'; --DDL文(Truncate)発行 ※ここでCommitが発生 EXECUTE IMMEDIATE 'TRUNCATE TABLE WK_TABLE_1'; --※1 ロールバック rollback; return 0; END; /
上記のファンクションの実行SQL
SET SERVEROUTPUT ON; DECLARE PA_MESSAGE VARCHAR2(200); v_Return NUMBER; BEGIN v_Return := HARADA_LAB2( PA_MESSAGE => PA_MESSAGE ); DBMS_OUTPUT.PUT_LINE('PA_MESSAGE = ' || PA_MESSAGE); DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return); END; /