天天看點

oracle存儲過程自治事務

       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也會影響主事務。