熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

小議Oracle11g的自治事務(四)

2013-11-13 22:09:03  來源: Oracle 
上一篇文章描述了自治事務實際上仍然是與主事務同處於一個會話中根據這個結論以及自治事務的特點可以確定主事務和自治事務擁有不同的事務上下文環境但是它們共享會話的上下文環境

  由於自治事務的提交或回滾不會影響到調用自治事務的主事務因此主事務和自治事務必然是彼此獨立的事務二者之間也不可能有任何事務級的上下文繼承關系

  但是由於主事務和自治事務同屬於一個會話因此二者具有相同的會話上下文環境比如在包變量上二者就可以看到對方對變量進行的修改

   SQL> CREATE OR REPLACE PACKAGE PA_TEST AS
   G_NUM NUMBER := ;
   END;
   /

  程序包已創建

  
 SQL> CREATE OR REPLACE PROCEDURE P_AUTO AS
   PRAGMA AUTONOMOUS_TRANSACTION;
   BEGIN
   INSERT INTO T_AUTO_TRANS VALUES ( TEST);
   PA_TESTG_NUM := PA_TESTG_NUM + ;
   DBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);
   COMMIT;
   END;
   /

  過程已創建

  下面分別在主事務和自治事務中修改包中變量的值

   SQL> SET SERVEROUT ON
SQL> EXEC PA_TESTG_NUM := PA_TESTG_NUM + ;

  PL/SQL 過程已成功完成

   SQL> EXEC DBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

  

  PL/SQL 過程已成功完成  

   SQL> EXEC P_AUTO

  

  PL/SQL 過程已成功完成

   SQL> EXEC P_AUTO

  

  PL/SQL 過程已成功完成 

   SQL> EXEC DBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

  

  PL/SQL 過程已成功完成

   SQL> EXEC PA_TESTG_NUM := PA_TESTG_NUM + ;

  PL/SQL 過程已成功完成  

   SQL> EXEC DBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

  

  PL/SQL 過程已成功完成

   SQL> EXEC P_AUTO

  

  PL/SQL 過程已成功完成

   SQL> CONN YANGTK/YANGTK@YTK已連接
SQL> SET SERVEROUT ON
SQL> EXEC DBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

  PL/SQL 過程已成功完成

  可以看到直到會話退出包中的變量才重新初始化在此之前自治事務和主事務可以同時看到彼此對變量的修改


From:http://tw.wingwit.com/Article/program/Oracle/201311/18336.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.