Oracle

Oracle - 在“插入前”觸發器中中止而不拋出異常

  • January 11, 2016

我知道這是一件很糟糕的事情,原因有很多,但我處於“完成任務”模式,我們有一個無法修改的軟體將記錄寫入表。其中一些記錄,出於商業原因,我們不希望出現在此表中。我在想我可以編寫一個觸發器來“中止”這些行中的任何一個而不會引發錯誤(這樣應用程序就不會在前端失敗,我們希望它認為它做了它的事情)。我對這個應用程序非常熟悉,並且知道它不會造成任何醜陋的副作用,我們只是無法修改它以按照我們需要的方式執行。

那麼,這是否可能,如果沒有,另一種方法是什麼?我曾想過有某種 Job 定期清理表格中我們不想要的記錄,但我寧願這些記錄一開始就永遠不存在,所以在任何時候都沒有任何程度的“骯髒”桌子。

表上的觸發器阻止INSERT操作完成的唯一方法是拋出錯誤。

正如你所說,這是一個巨大的黑客攻擊,但你可以

  • 重命名表
  • 創建與原始表同名的視圖
  • 如果您希望保留該行,則instead of在該視圖上創建一個觸發器,該觸發器僅在表上執行。INSERT否則,觸發器將什麼也不做。

只要應用程序沒有MERGE進入表格,這應該可以工作。當然,這是一次黑客攻擊,所以它絕對不會因為乾淨的程式碼而贏得任何獎項。

引用自:https://dba.stackexchange.com/questions/24047