【问题标题】:How can you sync 2 tables in oracle via insert trigger without going through an infinite loop?如何在不通过无限循环的情况下通过插入触发器在 oracle 中同步 2 个表?
【发布时间】:2011-07-08 08:57:24
【问题描述】:

您有两个 oracle 表 A 和 B。 当您在表 A 中插入一条记录时,该记录也将插入到表 B 中。 当您在表 B 中插入一条记录时,该记录也将插入到表 A 中。 现在,您将如何在不经历无限循环的情况下使用触发器来完成此操作?有没有办法用触发器来完成这个?

【问题讨论】:

    标签: oracle triggers replication sync infinite-loop


    【解决方案1】:

    为什么要使用触发器?如果您需要保持两个表同步,为什么不创建一个名为 B 的视图来查询 A?如果由于 A 和 B 位于不同的数据库上而需要单独的数据副本,则最好使用物化视图甚至 Streams 将数据从一台服务器复制到另一台服务器。

    【讨论】:

    • 谢谢贾斯汀。我会考虑使用物化视图来实现这一点。
    【解决方案2】:

    我支持贾斯汀的评论,即这可能是实现目标的错误方式。您可能会发现最好让一个表“C”具有两个视图“A”和“B”以及维护底层“C”表的 INSTEAD OF 触发器。

    您可以使用 DBMS_UTILITY.FORMAT_CALL_STACK 来确定调用链中的“更高层”。您还可以使用包级别变量或 SYS_CONTEXT 设置来标记您的代码处于什么状态。两者都不是很漂亮。

    【讨论】:

    • 谢谢加里。我会考虑贾斯汀和你的建议。感谢您的回答。
    • 嗨,加里。你能告诉我如何使用维护底层“C”表的 INSTEAD OF 触发器来使用两个视图“A”和“B”来执行表“C”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2017-12-26
    • 1970-01-01
    • 2020-08-29
    • 2010-11-17
    • 2020-05-19
    • 2011-08-28
    相关资源
    最近更新 更多