ORACLE|자율 트랜잭션(Autonomous Transaction) - 채번 시 활용
CREATE OR REPLACE FUNCTION
FunctionName(.....Parameter....)
RETURN DataType AS
PRAGMA
AUTONOMOUS_TRANSACTION;
BEGIN
..............생략
END;
위와 같이 PRAGMA AUTONOMOUS_TRANSACTION; 을 선언해주면 된다.
<Autonomous
Trasaction>
- 블록에서 자신의 작업을 수행하기 위해서 그 블록
고유의 트랜잭션을 생성
(부모 트랜잭션의 승인/롤백 여부에 상관없이 자신의 작업을 승인하거나 롤백할 수 있다.)
#참고
http://2dong0.springnote.com/pages/6250193?print=1
http://www.oracle-base.com/articles/misc/AutonomousTransactions.php
http://www.oradev.com/autonomous_transaction.jsp
http://blog.naver.com/hjc426/130112241247
-- 프로시저 생성
CREATE OR REPLACE PROCEDURE LOG_MESSAGE( P_MESSAGE VARCHAR2 )
AS
PRAGMA AUTONOMOUS_TRANSACTION;
-- 자율 트랜잭션
-- 부모 트랜잭션의 승인/롤백 여부에 상관없이 자신의 작업을 승인하거나 롤백할 수 있다.
BEGIN
INSERT INTO LOG_TABLE( USERNAME, DATE_TIME, MESSAGE )
VALUES ( USER, CURRENT_DATE, P_MESSAGE );
COMMIT;
END LOG_MESSAGE;
-- 테이블 생성
CREATE TABLE LOG_TABLE( USERNAME VARCHAR2(30),
DATE_TIME TIMESTAMP,
MESSAGE VARCHAR2(4000) );
CREATE TABLE TEMP_TABLE( N NUMBER );
-- 프로시저 실행
BEGIN
LOG_MESSAGE('INSERT INTO TEMP_TABLE');
INSERT INTO TEMP_TABLE VALUES(12345);
LOG_MESSAGE('ROLLBACK INSERT');
ROLLBACK;
END;