<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    這段時間遇到一個問題,程序里明明插入了一條記錄,但在后邊的一段Procedure中卻查不到剛剛插入的記錄,最后發(fā)現(xiàn)這個Procedure的定義中加入了PRAGMA AUTONOMOUS_TRANSACTION

    PRAGMA AUTONOMOUS_TRANSACTION中文翻譯過來叫“自治事務”(翻譯的還算好理解),對于定義成自治事務的Procedure,實際上相當于一段獨立運行的程序段,這段程序不依賴于主程序,也不干涉主程序



    自治事務的特點

    第一,這段程序不依賴于原有Main程序,比如Main程序中有未提交的數(shù)據(jù),那么在自治事務中是查找不到的。

    第二,在自治事務中,commit或者rollback只會提交或回滾當前自治事務中的DML,不會影響到Main程序中的DML。


    Autonomous Transaction Demo 1

    Without Pragma Autonomous Transaction

    CREATE TABLE t (  
    test_value VARCHAR2(25));  
      
    CREATE OR REPLACE PROCEDURE child_block IS  
      
    BEGIN  
      INSERT INTO t  
      (test_value)  
      VALUES  
      ('Child block insert');  
      COMMIT;  
    END child_block;  
    /  
      
    CREATE OR REPLACE PROCEDURE parent_block IS  
      
    BEGIN  
      INSERT INTO t  
      (test_value)  
      VALUES  
      ('Parent block insert');  
      
       child_block;  
      
       ROLLBACK;  
    END parent_block;  
    /  
      
    -- run the parent procedure   
    exec parent_block  
      
    -- check the results   
    SELECT * FROM t;  



    Output:  
    Parent block insert  
    Child block insert  




    With Pragma Autonomous Transaction

    CREATE OR REPLACE PROCEDURE child_block IS  
      
    PRAGMA AUTONOMOUS_TRANSACTION;  
      
    BEGIN  
      INSERT INTO t  
      (test_value)  
      VALUES  
      ('Child block insert');  
      
      COMMIT;  
    END child_block;  
    /  
      
    CREATE OR REPLACE PROCEDURE parent_block IS  
      
    BEGIN  
      INSERT INTO t  
      (test_value)  
      VALUES  
      ('Parent block insert');  
      
       child_block;  
      
       ROLLBACK;  
    END parent_block;  
    /  
    -- empty the test table   
    TRUNCATE TABLE t;  
      
    -- run the parent procedure   
    exec parent_block;  
      
    -- check the results   
    SELECT * FROM t;  

     



    Output:  
    Child block insert  



    Autonomous Transaction Demo 2

    Without Pragma Autonomous Transaction
    DROP TABLE t; 
     
    CREATE TABLE t (testcol NUMBER); 
     
    CREATE OR REPLACE FUNCTION howmanyrows RETURN INTEGER IS 
     i INTEGER; 
    BEGIN 
      SELECT COUNT(*) 
      INTO i 
      FROM t; 
     
      RETURN i; 
    END howmanyrows; 

     
    CREATE OR REPLACE PROCEDURE testproc IS 
     a INTEGER; 
     b INTEGER; 
     c INTEGER; 
    BEGIN 
      SELECT COUNT(*) 
      INTO a 
      FROM t; 
     
      INSERT INTO t VALUES (1); 
      COMMIT; 
     
      INSERT INTO t VALUES (2); 
      INSERT INTO t VALUES (3); 
     
      b := howmanyrows; 
     
      INSERT INTO t VALUES (4); 
      INSERT INTO t VALUES (5); 
      INSERT INTO t VALUES (6); 
      COMMIT; 
     
      SELECT COUNT(*) 
      INTO c 
      FROM t; 
     
      dbms_output.put_line(a); 
      dbms_output.put_line(b); 
      dbms_output.put_line(c); 
    END testproc; 

     
    set serveroutput on 
     
    exec testproc 




    Output:  
    0  
    3  
    6  
    Total execution time 2.782 sec.  




    With Pragma Autonomous Transaction



    Output:  
    0  
    1  
    6  




    轉(zhuǎn)載請注明出處:http://blog.csdn.net/pan_tian/article/details/7675800




    posted on 2013-03-08 16:29 abin 閱讀(473) 評論(0)  編輯  收藏 所屬分類: oracle
    主站蜘蛛池模板: 亚洲ⅴ国产v天堂a无码二区| 亚洲a∨国产av综合av下载 | 亚洲av日韩av综合| 免费无码黄网站在线观看| caoporn成人免费公开| 久久亚洲AV无码精品色午夜| 日韩高清免费观看| 久久福利青草精品资源站免费| 国产精品亚洲午夜一区二区三区| 啊v在线免费观看| 色欲色香天天天综合网站免费| 亚洲欧美日韩中文高清www777 | 亚洲熟女少妇一区二区| 午夜性色一区二区三区免费不卡视频 | 精品国产亚洲第一区二区三区| 亚洲日韩欧洲乱码AV夜夜摸| 免费福利网站在线观看| 99久久婷婷免费国产综合精品| 中文日韩亚洲欧美制服| 亚洲精品无码鲁网中文电影| 日韩吃奶摸下AA片免费观看| 国产精品偷伦视频观看免费| 小说专区亚洲春色校园| 日韩精品亚洲人成在线观看| 亚洲天堂中文字幕在线| 免费av欧美国产在钱| 男的把j放进女人下面视频免费| 久久精品国产亚洲AV电影网| 午夜影视日本亚洲欧洲精品一区| 国产免费观看视频| 91成年人免费视频| 久久99精品视免费看| 午夜不卡AV免费| 亚洲av无码av在线播放| 亚洲天堂中文字幕在线观看| 亚洲乱码无码永久不卡在线| 免费国产成人午夜电影| 久久久久久99av无码免费网站| 色欲国产麻豆一精品一AV一免费| 本道天堂成在人线av无码免费| 老司机福利在线免费观看|