Oracle - 在“插入前”触发器中中止而不抛出异常

Pao*_*ino 3 trigger oracle oracle-10g vpd

我知道这是一件糟糕的事情,原因有很多,但我处于“完成任务”模式,我们有一个我们无法修改的软件,可以将记录写入表。其中一些记录,出于业务原因,我们不希望出现在此表中。我想我可以编写一个触发器来“中止”这些行中的任何一行而不会抛出错误(这样应用程序就不会在前端失败,我们希望它认为它做了它的事情)。我非常熟悉这个应用程序,并且知道它不会造成任何丑陋的副作用,我们只是无法修改它以按照我们需要的方式运行。

那么,这有可能吗,如果没有,还有什么方法可以解决呢?我想过让某种工作定期清理我们不想要的记录表,但我宁愿这些记录永远不会在那里开始,所以在任何时候都没有程度的“肮脏”桌子。

Jus*_*ave 9

表上的触发器阻止INSERT操作完成的唯一方法是抛出错误。

正如你所说,这是一个巨大的黑客,但你可以

  • 重命名表
  • 创建与原始表同名的视图
  • 如果您希望instead of保留INSERT该行,则在该视图上创建一个仅在表上执行的触发器。否则,触发器将什么也不做。

只要应用程序没有MERGE对表进行操作,这应该有效。当然,这是一次又一次的黑客攻击,所以它绝对不会因为干净的代码而赢得任何奖项。