Autonomous transaction ve transaction durumu:
Oracle' da bir transaction insert,update,delete komutlarıyla başlar ve
bir DDL komutu, commit veya rollback ile biter.
Commit veya rollback bir procedure/function/package içinden
bile çağrılsa transaction devam ettiği için o transactionı sonlandıracaktır.
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