21 Aralık 2011 Çarşamba

Autonomous transaction ve transaction durumu

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


Hiç yorum yok:

Yorum Gönder