【问题标题】:Oracle trigger which invokes another trigger调用另一个触发器的 Oracle 触发器
【发布时间】:2016-12-27 00:41:59
【问题描述】:

有点棘手的场景。

在 Child_Table 上插入触发器之前:

  • 将 Child_Table.Field1 的值设置为“A”
  • Parent_Table 上的问题更新命令

在 Parent_Table 上更新触发器之前:

  • 设置:new.Field1 = Child_Table.Field1

小问题 - Parent_Table.Field1 = "A" 吗?

长问题 - Child_Table 触发器是否已经完成并将“A”的值提交给 Child_Table.Field1,以便 Parent_Table 可以使用它?

【问题讨论】:

    标签: oracle plsql triggers


    【解决方案1】:

    简短的回答 - 是的。

    更长的答案 - 触发器发出的 update 与任何其他更新一样,将触发后续的 on update 触发器。请注意,除非您明确这样做,否则触发器中的语句不会提交。但是,由于它与以下触发器在相同的事务中运行,因此它所做的任何更改都将可用于以下触发器。

    【讨论】:

    • 谢谢你,非常感谢!
    • 但是如何在 Parent_Table 的 Trigger 内获取“Child_Table.Field1”的值?我刚刚做了一个测试,虽然我可能遗漏了一些东西,但当父级上的触发器尝试访问 Child 中的新行时,我只是得到一个no data found(它还不存在 - 即在更新之前......)
    • 哦等等……这是一条红鲱鱼。您不需要父级的 BEFORE UPDATE 。 O.o 子上的 BEFORE INSERT 触发器可以做所有事情...... :) 我的错,太从字面上阅读 OP 请求,并创建了两个触发器。失败。没有 BEFORE UPDATE 触发器 = 可以完美运行。 :)
    • 嗯,这个网站的另一个奇怪的功能:除非你编辑你的答案,否则我无法撤消我的反对意见? O.o 奇怪。做一个小修改,我会改变我的反对意见;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2013-02-09
    • 1970-01-01
    • 2011-05-11
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多