ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 小议自治事务(二)

小议自治事务(二)

原创 Linux操作系统 作者:yangtingkun 时间:2008-07-31 23:18:54 0 删除 编辑

这两天看了11g的CONCEPT文档的事务部分,发现自治事务还有一些以前没有注意到的地方,这里简单总结一下。

这一篇描述自治事务的事务性特点。

小议自治事务(一):http://yangtingkun.itpub.net/post/468/467765

 

 

自治事务实现的功能是自治事务的提交或回滚不影响当前的事务。同时自治事务也是看不到当前会话所做的未提交的修改的。

SQL> TRUNCATE TABLE T_AUTO_TRANS;

表被截断。

SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
  2  BEGIN
  3   INSERT INTO T_AUTO_TRANS VALUES (2, 'TEST');
  4   FOR I IN (SELECT COUNT(*) CNT FROM T_AUTO_TRANS) LOOP
  5    DBMS_OUTPUT.PUT_LINE('P_TEST:' || I.CNT);
  6   END LOOP;
  7  END;
  8  /

过程已创建。

SQL> CREATE OR REPLACE PROCEDURE P_TEST_AUTO AS
  2   PRAGMA AUTONOMOUS_TRANSACTION;
  3  BEGIN
  4   INSERT INTO T_AUTO_TRANS VALUES (2, 'TEST');
  5   FOR I IN (SELECT COUNT(*) CNT FROM T_AUTO_TRANS) LOOP
  6    DBMS_OUTPUT.PUT_LINE('P_TEST_AUTO:' || I.CNT);
  7   END LOOP;
  8   COMMIT;
  9  END;
 10  /

过程已创建。

SQL> INSERT INTO T_AUTO_TRANS VALUES (1, 'TEST');

已创建 1 行。

SQL> SET SERVEROUT ON
SQL> EXEC P_TEST
P_TEST:2

PL/SQL 过程已成功完成。

SQL> EXEC P_TEST_AUTO
P_TEST_AUTO:1

PL/SQL 过程已成功完成。

可以看到,对于自治事务是看不到当前会话所作的未提交的修改的。

SQL> EXEC P_TEST
P_TEST:4

PL/SQL 过程已成功完成。

而对于当前会话,由于自治事务的操作已经提交,因此之后的查询是可以看到自治事务所进行的修改的。

自治事务看不到当前会话的修改,那么自治事务调用的过程是否能看到自治事务的修改呢:

SQL> TRUNCATE TABLE T_AUTO_TRANS;

表被截断。

SQL> CREATE OR REPLACE PROCEDURE P_AUTO_TRANS AS
  2   PRAGMA AUTONOMOUS_TRANSACTION;
  3  BEGIN
  4   INSERT INTO T_AUTO_TRANS VALUES (1, 'TEST');
  5   INSERT INTO T_AUTO_TRANS VALUES (2, 'TEST');
  6   FOR I IN (SELECT COUNT(*) CNT FROM T_AUTO_TRANS) LOOP
  7    DBMS_OUTPUT.PUT_LINE('P_AUTO_TRANS:' || I.CNT);
  8   END LOOP;
  9   P_TEST;
 10   P_TEST_AUTO;
 11   COMMIT;
 12  END;
 13  /

过程已创建。

SQL> INSERT INTO T_AUTO_TRANS VALUES (1, 'TEST');

已创建 1 行。

SQL> EXEC P_AUTO_TRANS
P_AUTO_TRANS:2
P_TEST:3
P_TEST_AUTO:1

PL/SQL 过程已成功完成。

建立一个自治事务,分别调用一个普通过程和一个声明了自治事务的过程,结果可以看到,自治事务调用普通过程,可以看到自治事务所进行的修改,而对于自治事务调用的自治事务过程,是看不到自治事务所进行的修改的。

从这一点看,自治事务更像是在单独的会话中执行,它的事务状态不会影响当前的事务,它也不会看到当前事务没有提交的修改。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-417370/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11076556