如何通过插入触发器同步oracle中的2个表而不经历无限循环?

发布于 2024-11-18 18:22:57 字数 137 浏览 2 评论 0原文

您有两个 oracle 表 A 和 B。 当您在表 A 中插入一条记录时,该记录也会被插入到表 B 中。 当您在表 B 中插入一条记录时,该记录也将被插入到表 A 中。 现在,您将如何使用触发器来完成此任务而不经历无限循环?有没有办法通过触发器来实现这一点?

You have two oracle tables A and B.
When you insert a record in table A, that record will be inserted in table B also.
When you insert a record in table B, that record will be inserted in table A as well.
Now how are you going to accomplish this with a trigger without going through an endless loop? Is there a way to accomplish this with a trigger?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

唔猫 2024-11-25 18:22:57

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

Why are you using a trigger? If you need to keep two tables in sync, why wouldn't you create a view named B that queried A? If you need a separate copy of the data because A and B are on different databases, you would be better off using materialized views or even Streams to replicate the data from one server to another.

骷髅 2024-11-25 18:22:57

我支持贾斯汀的评论,即这可能是实现目标的错误方法。您可能会发现最好有一个表“C”,带有两个视图“A”和“B”,并使用维护基础“C”表的 INSTEAD OF 触发器。

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

I support Justin's comment that this is probably the wrong way to achieve things. You may find it best to have one table 'C' with two views 'A' and 'B' with INSTEAD OF triggers that maintain the underlying 'C' table.

You can use DBMS_UTILITY.FORMAT_CALL_STACK to determine what is 'higher up' in the call chain. You can also use package level variables or SYS_CONTEXT settings to flag what state your code is in. Neither is very pretty.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文