pb調用存儲過程的時候,使用了事務,為了存儲過程的邏輯功能完整,往往在存儲過程中也會使用事務。如何保證存儲過程内外的事務合理使用顯得尤為重要。pb調用存儲過程的事務,我們稱其為主事務。他與存儲過程内的事務關系,無非就兩種情況。兩個事務是同一個事務或者兩個事務是獨立的兩個事務。
oracle提供了參數PRAGMA AUTONOMOUS_TRANSACTION用于标示存儲過程内的事務為自治事務,執行個體如下:
create or replace procedure p_a( as_return out number) as
PRAGMA AUTONOMOUS_TRANSACTION;
begin
savepoint point;
begin
insert into a values(8);
Exception
when others then
begin
rollback to savepoint point;
as_return := -1;
return;
end;
end ;
commit;
select count(*) into as_return from a where a =7;
end p_a;
oracle存儲過程要不要使用自治事務,要根據應用環境而定。如果使用自治事務,commit或rollback不影響主事務。但是無法擷取主transaction中未commit的資料。如果不使用自治事務,可以擷取主事務中未commit的資料,但是commit或者rollback也會影響主事務。