DDL文の暗黙コミット


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;
/