[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

小议Oracle 11g的自治事务(五)

作者: 杨廷琨,  出处:blog, 责任编辑: 王晓晨, 
2008-08-09 09:00
  由于自治事务和主事务属于同一个会话,因此会话级临时表和普通表的表现一样,没有太大的区别。自治事务可以看到主事务中已经提交的修改,看不到没有提交的修改。

小议Oracle 11g的自治事务(一小议Oracle 11g的自治事务(四)  

小议Oracle 11g的自治事务(二)   小议Oracle 11g的自治事务(五)

小议Oracle 11g的自治事务(三)  小议Oracle 11g的自治事务(六)

      主事务和自治事务在会话级共享上下文,上文给出了一个共享包中变量的例子,这里再描述临时表的情况。

  首先看看会话级的临时表:

SQL> CREATE GLOBAL TEMPORARY TABLE T_SESSION_STAT
  2 (ID NUMBER, NAME VARCHAR2(100), VALUE NUMBER)
  3 ON COMMIT PRESERVE ROWS;

  表已创建。

SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
  2 BEGIN
  3 INSERT INTO T_SESSION_STAT VALUES (1, 'P_TEST', 1);
  4 FOR I IN (SELECT ID, NAME FROM T_SESSION_STAT) LOOP
  5 DBMS_OUTPUT.PUT_LINE('ID:' || I.ID || ', NAME:' || I.NAME);
  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_SESSION_STAT VALUES (2, 'P_TEST_AUTO', 1);
  5 FOR I IN (SELECT ID, NAME FROM T_SESSION_STAT) LOOP
  6 DBMS_OUTPUT.PUT_LINE('ID:' || I.ID || ', NAME:' || I.NAME);
  7 END LOOP;
  8 COMMIT;
  9 END;
  10 /

  过程已创建。

SQL> SET SERVEROUT ON
SQL> INSERT INTO T_SESSION_STAT VALUES (0, 'SQL', 1);

  已创建 1 行。

SQL> EXEC P_TEST
  ID:0, NAME:SQL
  ID:1, NAME:P_TEST

  PL/SQL 过程已成功完成。

SQL> EXEC P_TEST_AUTO
  ID:2, NAME:P_TEST_AUTO

  PL/SQL 过程已成功完成。

SQL> EXEC P_TEST
  ID:0, NAME:SQL
  ID:1, NAME:P_TEST
  ID:2, NAME:P_TEST_AUTO
  ID:1, NAME:P_TEST
共2页。 1 2 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅