728x90
# PRAGMA AUTOMONOUS TRANSACTION
l transaction 이란
- 하나의 일련의 DML 문의 집합(insert, update…)
- DDL이나 DCL은 하나하나가 transaction
l pragma automonous_transaction
- 프로시져내에 DML 문들의 집합인 트랜잭션을 별도의 하나의 트랜잭선으로 구분하겠다는 뜻
- 주 트랜잭션과 독립트랜잭션은 commit과 rollback 이 동시에 적용 되지 않는다
l 독립 트랜잭션에서 5번의 commit 을 하게 되면 본래는 1번의 insert문은 rollback 이 불가능하다
l 이를 해결하기 위해 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;
/
l 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 |