PLSQL Language Referenc-PL/SQL靜態SQL-自治事務-控制自治事務

LuiseDalian發表於2014-03-18

控制自治事務

自治程式中的第1SQL語句開始了一個事務。當一個事務結束之後,下一個SQL語句開始了另一個事務。上一次提交或回滾之後所有SQL語句構成了當前的事務,控制自治事務需要使用下面的語句:

COMMIT;

ROLLBACK [TO savepoint_name]

SAVEPOINT savepoint_name

SET TRANSACTION

 

1)進入和離開

當進入自治程式的可執行部分時,主事務掛起;當退出程式時,主事務恢復。

如果試圖不提交或回滾就退出自治事務,則會引發異常。如果異常沒被處理或由於其它未被處理的異常而導致事務結束,則事務會回滾。

為了正常退出,必須顯式地提交或回滾所有自治事務。如果程式或它呼叫的程式有未決的事務,則PL/SQL會引發異常,未決的事務被回滾。

2)提交和回滾

COMMITROLLBACK結束了活動的自治事務,但沒有退出自治程式。當一個事務結束了,下一個SQL語句就開始了下一個事務。一個自治程式可以包含多個自治事務,如果它執行多個commit語句。

3)儲存點

儲存點的作用域是定義它的事務。在主事務中定義的儲存點與它的自治事務中定義的儲存是無關的。即主事務和自治事務可以使用相同的儲存點名稱。

 

只能回滾到在當前事務中宣告的儲存點。在自治事務中不能回滾到在主事務中宣告的儲存點。要達到這種效果必須通過退出自治程式來繼續主事務。

在主事務中,回滾到自治事務開始之前宣告的一個儲存點,不會回滾自治事務。因為自治事務是完全獨立於主事務的。

4)避免自治事務錯誤

不能在自治程式中自治事務開始時執行PIPE ROW語句,必須在執行PIPE ROW語句之前關閉自治事務。好在執行PIPE ROW語句之前,通常會提交或回滾自治事務。

為了避免錯誤,要記住:

n  如果自治事務試圖訪問由主事務所擁有的資源,可能會引發死鎖。資料庫在自治事務中引發異常,如果異常未被處理,則事務被回滾。

n  資料庫初始化引數TRANSACTIONS指定了併發事務的最大數目。因為自治事務是與主事務併發執行,所以那個數目可能會被超出。

n  如果試圖不提交或回滾就退出活動的自治事務,資料庫會引發異常,如果異常沒有得到處理,則事務被回滾。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1123695/,如需轉載,請註明出處,否則將追究法律責任。

相關文章