這段時間遇到一個問題,程序裏明明插入了一條記錄,但在後邊的一段Procedure中卻查不到剛剛插入的記錄,最後發現這個Procedure的定義中加入了PRAGMA AUTONOMOUS_TRANSACTION。ui
PRAGMA AUTONOMOUS_TRANSACTION中文翻譯過來叫「自治事務」(翻譯的還算好理解),對於定義成自治事務的Procedure,實際上至關於一段獨立運行的程序段,這段程序不依賴於主程序,也不干涉主程序spa
自治事務的特色
第一,這段程序不依賴於原有Main程序,好比Main程序中有未提交的數據,那麼在自治事務中是查找不到的。.net
第二,在自治事務中,commit或者rollback只會提交或回滾當前自治事務中的DML,不會影響到Main程序中的DML。翻譯
Autonomous Transaction Demo 1
Without Pragma Autonomous Transactioncode
-
-
test_value VARCHAR2(
25));
-
-
CREATE OR REPLACE PROCEDURE child_block IS
-
-
-
-
-
-
-
-
-
-
-
CREATE OR REPLACE PROCEDURE parent_block IS
-
-
-
-
-
-
(
'Parent block insert');
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
With Pragma Autonomous Transactionserver
-
CREATE OR REPLACE PROCEDURE child_block IS
-
-
PRAGMA AUTONOMOUS_TRANSACTION;
-
-
-
-
-
-
-
-
-
-
-
-
CREATE OR REPLACE PROCEDURE parent_block IS
-
-
-
-
-
-
(
'Parent block insert');
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Autonomous Transaction Demo 2
Without Pragma Autonomous Transactionblog
-
-
-
CREATE TABLE t (testcol NUMBER);
-
-
CREATE OR REPLACE FUNCTION howmanyrows RETURN INTEGER IS
-
-
-
-
-
-
-
-
-
-
-
CREATE OR REPLACE PROCEDURE testproc IS
-
-
-
-
-
-
-
-
-
INSERT INTO t VALUES (1);
-
-
-
INSERT INTO t VALUES (2);
-
INSERT INTO t VALUES (3);
-
-
-
-
INSERT INTO t VALUES (4);
-
INSERT INTO t VALUES (5);
-
INSERT INTO t VALUES (6);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Total execution time 2.782 sec.
With Pragma Autonomous Transaction事務
-
CREATE OR REPLACE FUNCTION howmanyrows RETURN INTEGER IS
-
-
-
PRAGMA AUTONOMOUS_TRANSACTION;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
轉載請註明出處:http://blog.csdn.net/pan_tian/article/details/7675800get