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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

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

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



    自治事務的特點

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

    第二,在自治事務中,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  




    轉載請注明出處:http://blog.csdn.net/pan_tian/article/details/7675800




    posted on 2013-03-08 16:29 abin 閱讀(474) 評論(0)  編輯  收藏 所屬分類: oracle
    主站蜘蛛池模板: 一级成人a毛片免费播放| 国产精品亚洲产品一区二区三区| 成人免费一区二区无码视频| 国产人成免费视频网站| 在线视频观看免费视频18| 女人与禽交视频免费看| 亚洲国产专区一区| 污网站在线免费观看| 久久免费观看国产精品| 成人黄动漫画免费网站视频| 亚洲中文字幕丝袜制服一区| 亚洲精品在线播放视频| 香蕉国产在线观看免费| 欧洲一级毛片免费| 亚洲人成电影在线观看青青| 成在线人直播免费视频| 国产92成人精品视频免费| 久久国产成人亚洲精品影院| 亚洲人色大成年网站在线观看| 污视频网站免费观看| 免费H网站在线观看的| 亚洲无码高清在线观看| 亚洲成a人片在线观| 国产精品免费大片一区二区| 歪歪漫画在线观看官网免费阅读| 永久亚洲成a人片777777| 亚洲一区二区三区成人网站| 国产一精品一av一免费爽爽| 四虎影视在线永久免费看黄| 亚洲日本香蕉视频| 日韩a在线观看免费观看| 亚洲大片免费观看| 国产男女猛烈无遮挡免费网站| 亚洲国产精品久久66| jizz免费一区二区三区| 国产无遮挡又黄又爽免费视频| 91精品国产亚洲爽啪在线影院| 国产成人无码精品久久久免费 | 久久精品国产亚洲5555| 亚洲中文字幕无码中文字| 免费A级毛片无码A∨|