數據庫事務是一種單元操做,要麼是所有操做都成功,要麼所有失敗。在Oracle中,一個事務是從執行第一個數據管理語言(DML)語句開始,直到執行一個COMMIT語句,提交保存這個事務,或者執行一個ROLLBACK語句,放棄這次操做結束。數據庫
針對這種困境,Oracle提 供了一種便捷的方法,即自治事務。自治事務從當前事務開始,在其自身的語境中執行。它們能獨立地被提交或從新運行,而不影響正在運行的事務。正由於這樣, 它們成了編寫錯誤日誌表格的理想形式。在事務中檢測到錯誤時,您能夠在錯誤日誌表格中插入一行並提交它,而後在不丟失此次插入的狀況下回滾主事務。ide
由於自治事務是與主事務相分離的,因此它不能檢測到被修改過的行的當前狀態。這就好像在主事務提交以前,它們一直處於單獨的會話裏,對自治事務來講,它們是不可用的。然而,反過來狀況就不一樣了:主事務可以檢測到已經執行過的自治事務的結果。spa
PRAGMA AUTONOMOUS_TRANSACTION 自治事務 不受別的事務的影響日誌
1 CREATE OR REPLACE FUNCTION FUNC_CREATE_DEMO RETURN NUMBER IS 2 LINK_ID NUMBER; 3 PRAGMA AUTONOMOUS_TRANSACTION; 4 BEGIN 5 --LINK_ID RES_SPEC_ID OPR_STATE_ID 6 --do something insert update delete 7 COMMIT; 8 RETURN LINK_ID; 9 END;