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也会影响主事务。