您好,登錄后才能下訂單哦!
自治事務(autonomous transaction)允許你創建一個"事務中的事務",它能獨立于其父事務提交或回滾。利用自治事務,可以掛起當前執行的事務,開始一個新事務,完成一些工作,然后提交或回滾,所有這些都不影響當前所執行事務的狀態。自治事務提供了一種用PL/SQL控制事務的新方法,可用于:
頂層匿名塊;
本地(過程中的過程)、獨立或打包的函數和過程;
對象類型的方法;
數據庫觸發器。
使用例子演示自治事務如何工作
--創建測試表用于保存信息 zx@ORCL>create table t ( msg varchar2(25) ); Table created. --創建自治事務的存儲過程 zx@ORCL>create or replace procedure Autonomous_Insert 2 as pragma autonomous_transaction;---指示自治事務語句 4 begin 5 insert into t values ( 'Autonomous Insert' ); 6 commit; 7 end; 8 / Procedure created. --創建普通存儲過程 zx@ORCL>create or replace procedure NonAutonomous_Insert 2 as 3 begin 4 insert into t values ( 'NonAutonomous Insert' ); 5 commit; 6 end; 7 / Procedure created.
觀察使用PL/SQL代碼中非自治事務的行為
zx@ORCL>begin 2 insert into t values ( 'Anonymous Block' ); 3 NonAutonomous_Insert; 4 rollback; 5 end; 6 / PL/SQL procedure successfully completed. zx@ORCL>select * from t; MSG --------------------------------------------------------------------------- Anonymous Block NonAutonomous Insert
可以觀察到非自治事務的過程中的commit也把調用它的父事務也提交了,而父事務中的rollback沒有起到作用。
再觀察使用PL/SQL代碼中非自治事務的行為
zx@ORCL>delete from t; 2 rows deleted. zx@ORCL>commit; Commit complete. zx@ORCL>begin insert into t values ( 'Anonymous Block' ); Autonomous_Insert; rollback; end; 6 / PL/SQL procedure successfully completed. zx@ORCL>select * from t; MSG --------------------------------------------------------------------------- Autonomous Insert
可以看到,自治事務過程中的commit只把它本身的事務提交了,而對于父事務的語句沒有起到作用,而父事務中的rollback對自治事務中的語句也沒有作用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。