2010-11-04 46 views

回答

27

Oracle中沒有ON COMMIT觸發機制。但是,有解決方法:

  1. 您可以使用帶有ON COMMIT REFRESH的實例化視圖並向此MV添加觸發器。這將允許您在提交時修改基表時已觸發邏輯。如果觸發器發生錯誤,則事務將被回滾(您將失去所有未被更改的更改)。

  2. 您可以使用DBMS_JOB將操作推遲到提交後。這將是一個異步操作,並且在某些情況下可能是可取的(例如,在交易成功後您想要發送電子郵件)。如果您回滾主要交易,則該作業將被取消。作業和主會話是獨立的:如果作業失敗,主事務將不會回滾。

對於你的情況,你可以使用選項(1)。我個人不喜歡在觸發器中編寫業務邏輯,因爲它增加了很多複雜性,但技術上我認爲這是可行的。

+0

謝謝。選項#1對我的情況很方便。 – 2010-11-04 16:42:27

0

我有一個類似的問題,但不幸的是選項1不方便我的情況。

「Ask Tom」也提出了另一種可能的解決方案,即指定一個存儲過程,並在執行COMMIT之前調用該過程。 如果你有權訪問執行COMMIT的代碼,這個解決方案是很方便的,但對我來說這是最簡單的解決方案。