【DB筆試面試392】Oracle的自治事務是什麼?

  • 2019 年 10 月 10 日
  • 筆記

Q

題目

Oracle的自治事務是什麼

A

答案

Oracle的自治事務(Autonomous Transaction)是將一個主事務分割成幾個子事務,在執行完子事務以後再繼續執行主事務。這裡的關鍵是,子事務是獨立於主事務的,子事務中的ROLLBACK和COMMIT操作只會影響子事務中的DML操作;同樣,主事務中的ROLLBACK和COMMIT操作只會影響主事務中的DML操作,而不會影響子事務中的操作。在子事務中已經COMMIT的操作,不會被主事務中的ROLLBACK撤銷。

可以在程式開頭使用如下命令實現自治事務:

PRAGMA AUTONOMOUS_TRANSACTION;

定義自治事務必須遵循以下規則:

(1)如果要被定義為自治事務的程式是匿名的,那麼它必須是一個最外層的程式塊。

(2)如果要被定義為自治事務的程式不是匿名的,那麼它必須是函數或者存儲過程。在一個包中,只有其中的函數或存儲過程能夠定義成自治事務。整個包不能聲明為自治事務。

(3)一個對象的方法可以聲明為自治事務。

(4)觸發器可以聲明為自治事務。

(5)內嵌程式塊不能聲明為自治事務。

需要注意的是,對於一個匿名的自治事務程式塊來說,只有這個塊的BEGIN和END之間的程式碼被看作是自治事務。

自治事務可以用來解決「ORA-14551: 無法在查詢中執行DML操作」錯誤。觸發器無法包含COMMIT語句,除非有PRAGMA AUTONOMOUS_TRANSACTION標記。但是,只有觸發中的語句才能被提交,主事務則不行。

DB筆試面試歷史連接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

About Me:小麥苗

● 本文作者:小麥苗,只專註於資料庫的技術,更注重技術的運用

● 作者部落格地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列題目來源於作者的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

● QQ:646634621 QQ群:618766405

● 題目解答若有不當之處,還望各位朋友批評指正,共同進步