是否有任何方式在oracle數據庫中定義觸發器,它將在COMMIT(和ROLLBACK,如果它拋出異常)之前同步觸發,以防指定的表更改?如何在Oracle中定義觸發器ON COMMIT?
17
A
回答
27
Oracle中沒有ON COMMIT觸發機制。但是,有解決方法:
您可以使用帶有ON COMMIT REFRESH的實例化視圖並向此MV添加觸發器。這將允許您在提交時修改基表時已觸發邏輯。如果觸發器發生錯誤,則事務將被回滾(您將失去所有未被更改的更改)。
您可以使用DBMS_JOB將操作推遲到提交後。這將是一個異步操作,並且在某些情況下可能是可取的(例如,在交易成功後您想要發送電子郵件)。如果您回滾主要交易,則該作業將被取消。作業和主會話是獨立的:如果作業失敗,主事務將不會回滾。
對於你的情況,你可以使用選項(1)。我個人不喜歡在觸發器中編寫業務邏輯,因爲它增加了很多複雜性,但技術上我認爲這是可行的。
0
我有一個類似的問題,但不幸的是選項1不方便我的情況。
「Ask Tom」也提出了另一種可能的解決方案,即指定一個存儲過程,並在執行COMMIT之前調用該過程。 如果你有權訪問執行COMMIT的代碼,這個解決方案是很方便的,但對我來說這是最簡單的解決方案。
相關問題
- 1. 如何在django中定義觸發器?
- 2. 觸發器在oracle中
- 3. SQL觸發器在Oracle中
- 4. 在Oracle觸發器中用戶定義的異常
- 5. 如何更改Oracle中的觸發器?
- 6. 觸發器中的Commit和Raiserror
- 7. Oracle之前INSERT觸發器
- 8. mysql觸發器到oracle觸發器
- 9. 在Oracle表上創建ON INSERT觸發器
- 10. Oracle觸發器:raise_application_error
- 11. Oracle 10g觸發器
- 12. SQL Oracle觸發器
- 13. 從Oracle觸發器
- 14. Oracle SQL(觸發器)
- 15. Oracle SQL觸發器
- 16. ORACLE 11g觸發器
- 17. 如何在Oracle中開發after serverror觸發器?
- 18. INSERT如何在Oracle中發佈COMMIT之前工作
- 19. 如何在Spring 3中配置自定義觸發器?
- 20. 如何在ControlTemplate觸發器中使用自定義屬性
- 21. 自定義Quartz.Net觸發器
- 22. 觸發器在Oracle中無效
- 23. 在oracle中創建觸發器
- 24. 在oracle中導入觸發器sql developer
- 25. Oracle觸發器在DBA_SOURCE中未顯示
- 26. 確定更新觸發器是否由ON UPDATE CASCADE觸發
- 27. 獲取觸發Oracle觸發器的值
- 28. Oracle AFTER INSERT觸發器未觸發
- 29. Oracle PL/SQL觸發器請求綁定
- 30. 處理ON INSERT觸發器時innodb表如何被鎖定?
謝謝。選項#1對我的情況很方便。 – 2010-11-04 16:42:27