Bu durumda transactionın sonlanmadan başka bir tabloya yeni bir transaction başlatıp ana transactionının durumunu değiştirmeden sonlandırmamız gerekirse bunun için autonomous transaction kullanılır.
--aşağıdaki örnek scriptler ile deneyebilirsiniz.
create table emp (id number, ad varchar2(20), soyad varchar2(20)); insert into emp values (1,'RAMAZAN','ÖZTÜRK'); insert into emp values (2,'AHMET','ÖZTÜRK'); insert into emp values (3,'DEDE','ÖZTÜRK'); insert into emp values (4,'BABA','ÖZTÜRK'); alter table emp add sal number; create table emp_aud (id number,old_sal number,new_sal number,cdate date); alter table emp_aud add empid number; create sequence idver ; create or replace trigger trg_emp before delete or update on emp for each row declare pragma autonomous_transaction; begin insert into emp_aud values (idver.nextval,:old.sal,:new.sal,sysdate,:old.id); commit; end; update emp set sal=400 where id=1; create or replace procedure emp_tmp as begin insert into emp values (idver.nextval,'KEVIN','COSTNER',100); rollback; end; / insert into emp values (idver.nextval,'KEVIN'||idver.currval,'COSTNER',200); insert into emp values (idver.nextval,'KEVIN'||idver.currval,'COSTNER',300); exec emp_tmp(); insert into emp values (idver.nextval,'KEVIN'||idver.currval,'COSTNER',400); rollback;
Buradan inceleyebilirsiniz.(Concepts)
http://docs.oracle.com/cd/B28359_01/server.111/b28318/transact.htm#i7733
Hiç yorum yok:
Yorum Gönder