autonomous_transaction을 실험하는 흥미로운 상황이 있습니다. 다음과 같은 상황을 고려 (이이 방법을 쓸 수 없습니다 주하십시오 개념의 단지 증거) :트리거 및 제약 조건 위반시 autonomous_transaction
create table t
(
id int primary key,
changed date
)
/
create or replace trigger t_trig
before insert or update
on t
for each row
declare
PRAGMA AUTONOMOUS_TRANSACTION;
begin
:new.changed := sysdate;
commit;
end;
/
insert into t(id, changed) values (1, sysdate);
insert into t(id, changed) values (2, sysdate);
현재 시간으로 변경된 날짜 별 :
SQL> select * from t;
ID CHANGED
--------- -----------------
1 19.09.11 15:29:44
2 19.09.11 15:32:35
하자는 5 초를 취할 휴식 후 다음을 수행하십시오
분명히update t set id = 2 where id = 1;
이 제약 조건 위반 실패 할 것이다, 그러나뿐만 아니라 changed
속성을 변경하지 않습니다
SQL> select * from t;
ID CHANGED
--------- -----------------
1 19.09.11 15:29:44
2 19.09.11 15:32:35
내 질문에 : 왜 이런 일이 발생합니까? 나는 몇 가지 기본 개념을 오해하고 있지만 그 아이디어를 얻을 수는 없다고 확신한다.
미리 도움을 주셔서 감사합니다.