【问题标题】: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