这段时间遇到一个问题,程序里明明插入了一条记录,但在后边的一段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