【问题标题】:ORA-04091 - How can I alter a table that a trigger fires on?ORA-04091 - 如何更改触发器触发的表?
【发布时间】:2011-05-21 00:09:22
【问题描述】:

所以我有表foo,我想在触发器t_foo 触发时删除其他foo 行:

CREATE OR REPLACE TRIGGER "t_foo" AFTER INSERT OR DELETE OR UPDATE ON foo

/*delete some other records from foo that are not :NEW.* or :OLD.* \*

如果没有ORA-04091: 表名发生变异,我将如何执行此操作,触发器/函数可能看不到它。这甚至可能吗?

【问题讨论】:

  • 您想在触发器中更改表的结构?我读对了吗?
  • 对不起,我的意思是改变 foo 行,而不是结构...我会编辑

标签: sql oracle triggers ora-04091


【解决方案1】:

为什么不在存储过程中执行此操作,您可以将插入和删除包装在事务中,并且可以清楚地记录这种副作用行为?

【讨论】:

  • 所以你是说把删除逻辑放在一个存储过程中并从这个触发器中调用它?
  • 没有。直接调用 SP,插入行并执行副作用删除,包装在事务中。 SP+事务的方法避免了变异表的混乱,并且更加自我记录。
【解决方案2】:

【讨论】:

  • 仅供参考 - 此链接已失效。
【解决方案3】:

这基本上意味着您的表中有相互依赖的行,可能是一个层次结构,具有从列到主键的自引用。你想过ON DELETE CASCADE吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2013-05-13
    • 1970-01-01
    • 2012-04-26
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多