自治事務(wù)(autonomous transaction)允許你創(chuàng)建一個"事務(wù)中的事務(wù)",它能獨立于其父事務(wù)提交或回滾。利用自治事務(wù),可以掛起當(dāng)前執(zhí)行的事務(wù),開始一個新事務(wù),完成一些工作,然后提交或回滾,所有這些都不影響當(dāng)前所執(zhí)行事務(wù)的狀態(tài)。自治事務(wù)提供了一種用PL/SQL控制事務(wù)的新方法,可用于:
網(wǎng)站設(shè)計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);網(wǎng)站建設(shè)、成都網(wǎng)站制作收費合理;免費進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運營了10余年的創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。
頂層匿名塊;
本地(過程中的過程)、獨立或打包的函數(shù)和過程;
對象類型的方法;
數(shù)據(jù)庫觸發(fā)器。
使用例子演示自治事務(wù)如何工作
--創(chuàng)建測試表用于保存信息 zx@ORCL>create table t ( msg varchar2(25) ); Table created. --創(chuàng)建自治事務(wù)的存儲過程 zx@ORCL>create or replace procedure Autonomous_Insert 2 as pragma autonomous_transaction;---指示自治事務(wù)語句 4 begin 5 insert into t values ( 'Autonomous Insert' ); 6 commit; 7 end; 8 / Procedure created. --創(chuàng)建普通存儲過程 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代碼中非自治事務(wù)的行為
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
可以觀察到非自治事務(wù)的過程中的commit也把調(diào)用它的父事務(wù)也提交了,而父事務(wù)中的rollback沒有起到作用。
再觀察使用PL/SQL代碼中非自治事務(wù)的行為
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
可以看到,自治事務(wù)過程中的commit只把它本身的事務(wù)提交了,而對于父事務(wù)的語句沒有起到作用,而父事務(wù)中的rollback對自治事務(wù)中的語句也沒有作用。