首页 > 解决方案 > 如何将一个oracle数据库表中的选定数据列实时插入到另一个oracle数据库表中

问题描述

我有一个用例,我需要通过运行带有 where 子句的 select 语句来监视 oracle 数据库 XYZ 中的表 A。如果此 select 语句获取任何行,那么我需要立即将这些行插入到另一个表 B 中,该表是另一个 Oracle 数据库 MNO。

另外,假设当我在监视时,第二次相同的选择语句检索到已经在上述步骤中插入的行,但现在它的几列的值发生了变化,那么另一个表 B 也应该立即更新更新了表 A 中的列值。

我可以使用 shell 脚本来实现这一点吗?谁能让我知道如何实现这一目标?

非常感谢您提前提出的建议。

标签: sqllinuxoracleshellplsql

解决方案


我会说这merge就是你需要的:

merge into mno.table_2 b  -- or, possibly, table_2@mno
  using table_1 a
  on (a.id = b.id)
  when matched then update set
    (b.col1 = a.col1,
     b.col2 = a.col2
    )
  when not matched then insert (col1, col2)
    values (a.col1, a.col2);

注意第 1 行:

  • 如果mno确实是“数据库”(而不仅仅是同一数据库中的另一个用户),那么您必须使用数据库链接(第 1 行的注释部分)
  • 如果mno只是另一个用户,那么它应该grant select, insert, update放在用户的桌子上xyz;否则,该操作将不起作用

合并还意味着您不必单独检查该行是否存在于另一个表中。


外壳脚本?为什么?将所有内容保存在数据库中。

“守望”可以通过

  • 创建一个数据库触发器,xyz.table_1以便一旦发生变化,它就会触发并运行merge
  • dbms_scheduler或者,安排一个定期(例如,每小时,每天两次,...)运行的作业(使用)merge

推荐阅读