어느 가을날의 전환점

ORACLE|자율 트랜잭션(Autonomous Transaction) - 채번 시 활용 본문

Database/Oracle

ORACLE|자율 트랜잭션(Autonomous Transaction) - 채번 시 활용

어느가을빛 2011. 7. 25. 09:51

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;

 

Comments