Oracle自治事務實際用例

來源:互聯網
上載者:User

標籤:

如下,建立兩個預存程序:

在主自治事務中,我們插入一條記錄,然後在自治事務中,查看錶中行數,然後嘗試插入三條記錄,查看行數,最後rollback 查看行數,最後返回主事務,查看行數。

1、如下代碼:

  --主事務  PROCEDURE p_test_at_and_mt IS    cnt NUMBER := -1;  BEGIN    INSERT INTO msg VALUES (‘father Record‘);      SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘主事務插入一行之後行數:‘ || cnt);    p_test_at_and_mt_son;    dbms_output.put_line(‘運行子自治事務之後,主事務的行數:‘ || cnt);    --COMMIT;  END p_test_at_and_mt;  --測試自治事務(子自治)  PROCEDURE p_test_at_and_mt_son IS    PRAGMA AUTONOMOUS_TRANSACTION;    cnt NUMBER := -1;  BEGIN    SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘插入三條記錄之前子自治事務行數:‘ || cnt);    ROLLBACK;      INSERT INTO msg VALUES (‘son Record1‘);    INSERT INTO msg VALUES (‘son Record2‘);    INSERT INTO msg VALUES (‘son Record3‘);      SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘插入三條記錄之後子自治事務行數:‘ || cnt);    ROLLBACK;      SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘Rollback之後,子自治事務行數:‘ || cnt);    --COMMIT;  END p_test_at_and_mt_son;

測試主事務預存程序,結果如下:

主事務插入一行之後行數:1插入三條記錄之前子自治事務行數:0插入三條記錄之後子自治事務行數:3Rollback之後,子自治事務行數:0運行子自治事務之後,主事務的行數:1

可以看到,在運行從主事務,沒有提交的事務,在子自治事務中是看不到的。但是在他主事務本身中沒有提交也能看到插入了一條記錄。

 

2、當我們將第二個預存程序,做點修改,假如下面著色部分兩行,並且提交,我們運行主事務,看看有什麼反映。

PROCEDURE p_test_at_and_mt_son IS    PRAGMA AUTONOMOUS_TRANSACTION;    cnt NUMBER := -1;  BEGIN    SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘插入三條記錄之前子自治事務行數:‘ || cnt);    ROLLBACK;      INSERT INTO msg VALUES (‘son Record1‘);    INSERT INTO msg VALUES (‘son Record2‘);    INSERT INTO msg VALUES (‘son Record3‘);      SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘插入三條記錄之後子自治事務行數:‘ || cnt);    ROLLBACK;      SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘Rollback之後,子自治事務行數:‘ || cnt);      INSERT INTO msg VALUES (‘son Record4‘);    SELECT COUNT(*) INTO cnt FROM msg; --子事務插入最後一條    COMMIT;  END p_test_at_and_mt_son;

運行結果:

主事務插入一行之後行數:1插入三條記錄之前子自治事務行數:0插入三條記錄之後子自治事務行數:3Rollback之後,子自治事務行數:0運行子自治事務之後,主事務的行數:1

竟然和第一個完全一樣,可是我們在子自治事務中明明commit了啊,按照如果不加下面這一句的申明,那麼我們可以肯定,看到的是 2(最後)

PRAGMA AUTONOMOUS_TRANSACTION;

看下,資料改變情況可以發現,我們的第一條,和子自治的最後commit的一條都插入了,進去。 自治,就是這個意思啦。



3、在做點修改,如下,直接插入三條記錄,commit我們再次運行主事務,看結果:
  PROCEDURE p_test_at_and_mt_son IS    PRAGMA AUTONOMOUS_TRANSACTION;    cnt NUMBER := -1;  BEGIN    SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘插入三條記錄之前子自治事務行數:‘ || cnt);    ROLLBACK;      INSERT INTO msg VALUES (‘son Record1‘);    INSERT INTO msg VALUES (‘son Record2‘);    INSERT INTO msg VALUES (‘son Record3‘);      SELECT COUNT(*) INTO cnt FROM msg;    dbms_output.put_line(‘插入三條記錄之後子自治事務行數:‘ || cnt);    COMMIT;  END p_test_at_and_mt_son;

結果如下:

主事務插入一行之後行數:1插入三條記錄之前子自治事務行數:0插入三條記錄之後子自治事務行數:3運行子自治事務之後,主事務的行數:1

相信到這裡就知道了,主事務,看不到子事務的,commit rollback的操作,即:他們互相獨立。

 

因為,我們在主事務中,沒有寫commit,你可以在運行過程中調試的時候,手動 按下rollback的按鈕,你可以看到。後台把子事務的交易處理提交到了資料庫。

 

總之:相互獨立,不影響,不干擾,看到的資料也是。

分享共進步!

謝謝閱讀!

 

 

 

 

 

Oracle自治事務實際用例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.