본문 바로가기

빅데이터과정/PL/SQL

#14_140702_PL_SQL_PRAGMA AUTOMONOUS TRANSACTION

728x90

# PRAGMA AUTOMONOUS TRANSACTION



transaction 이란
하나의 일련의 DML 문의 집합(insert, update…)
DDL이나 DCL은 하나하나가 transaction

pragma automonous_transaction
프로시져내에 DML 문들의 집합인 트랜잭션을 별도의 하나의 트랜잭선으로 구분하겠다는 뜻


주 트랜잭션과 독립트랜잭션은 commit과 rollback 이 동시에 적용 되지 않는다




독립 트랜잭션에서 5번의 commit 을 하게 되면 본래는 1번의 insert문은 rollback 이 불가능하다
이를 해결하기 위해 pragma autonomous_transaction을 이용해서 독립된 세션으로 권한을 주면 가능하다





문제166. pragma autonomous_transaction 을 써서 아래의 temp_table에 입력될 데이터가 rollback될 수 있도록 테스트 하시오


CREATE TABLE log_table(
username VARCHAR2(20),
date_time DATE,
message VARCHAR2(20));

create or replace procedure log_message
(p_message varchar2)
as
begin
 insert into log_table(username,date_time, message)
 values(user, SYSDATE, p_message);
 commit;
END log_message;
/

CREATE TABLE temp_table(
empno NUMBER(10));

begin
 insert  into  temp_table  values(12345);
 log_message('allen is clerk');
 end;
/

----------------------------------------------------------------------------------

create or replace procedure log_message
(p_message varchar2)
AS
 PRAGMA AUTONOMOUS_TRANSACTION;
begin
 insert into log_table(username,date_time, message)
 values(user, SYSDATE, p_message);
 commit;
END log_message;
/

begin
 insert  into  temp_table  values(54321);
 log_message('i am a student');
 end;


/



pragma autonomous_transaction을 이용해서 권한을 부여하였더니 프로시져가 독립된 세션으로 동작하여 프로시져내의 DML문은 commit 되었지만 begin 구문의 insert 문은 rollback 되었음을 확인할 수 있다.


'빅데이터과정 > PL/SQL ' 카테고리의 다른 글

#14_140702_PL_SQL_DETERMINISTIC  (0) 2014.07.15
#14_140702_PL_SQL_PARALLEL ENABLE  (0) 2014.07.15
#14_140702_PL_SQL_AUTHID CURRETN USER  (0) 2014.07.15
#13_140701_PL_SQL_REF CURSOR  (0) 2014.07.14
#13_140701_PL_SQL_동적 SQL  (0) 2014.07.14