【发布时间】:2011-07-08 08:57:24
【问题描述】:
您有两个 oracle 表 A 和 B。 当您在表 A 中插入一条记录时,该记录也将插入到表 B 中。 当您在表 B 中插入一条记录时,该记录也将插入到表 A 中。 现在,您将如何在不经历无限循环的情况下使用触发器来完成此操作?有没有办法用触发器来完成这个?
【问题讨论】:
标签: oracle triggers replication sync infinite-loop
您有两个 oracle 表 A 和 B。 当您在表 A 中插入一条记录时,该记录也将插入到表 B 中。 当您在表 B 中插入一条记录时,该记录也将插入到表 A 中。 现在,您将如何在不经历无限循环的情况下使用触发器来完成此操作?有没有办法用触发器来完成这个?
【问题讨论】:
标签: oracle triggers replication sync infinite-loop
为什么要使用触发器?如果您需要保持两个表同步,为什么不创建一个名为 B 的视图来查询 A?如果由于 A 和 B 位于不同的数据库上而需要单独的数据副本,则最好使用物化视图甚至 Streams 将数据从一台服务器复制到另一台服务器。
【讨论】:
我支持贾斯汀的评论,即这可能是实现目标的错误方式。您可能会发现最好让一个表“C”具有两个视图“A”和“B”以及维护底层“C”表的 INSTEAD OF 触发器。
您可以使用 DBMS_UTILITY.FORMAT_CALL_STACK 来确定调用链中的“更高层”。您还可以使用包级别变量或 SYS_CONTEXT 设置来标记您的代码处于什么状态。两者都不是很漂亮。
【讨论】: