【问题标题】:How to insert the selected data columns from one oracle database table into another oracle database table in real time如何将一个oracle数据库表中的选定数据列实时插入到另一个oracle数据库表中
【发布时间】:2021-12-20 09:14:22
【问题描述】:

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

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

我可以使用 shell 脚本来实现吗? 谁能告诉我如何实现这一目标?

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

【问题讨论】:

    标签: sql linux oracle shell plsql


    【解决方案1】:

    我会说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;否则,该操作将不起作用

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


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

    “守望”可以通过

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      相关资源
      最近更新 更多