填充另一个表中的表,包括记录

时间:2016-12-19 11:01:54

标签: sql oracle

我正在尝试从另一个表填充表,包括日志记录。

例如,有2个表 A B

  • 数据应从 B 复制到 A
  • 两个表中都有一个名为id的主键。
  • 如果存在,脚本应更新匹配的行。
  • 如果表格 A
  • 中未找到,则脚本应插入 B 中缺失的行

数据预计约为800 k,有15列。

2 个答案:

答案 0 :(得分:3)

我不知道你对“包括日志记录”的意思,但是要从一个表插入/更新到另一个表,请使用merge

merge into a 
using b on (b.id = a.id)
when matched then update 
   set col1 = b.col1, 
       col2 = b.col2
when not matched then insert (id, col1, col2)
values (b.id, b.col1, col2);

这假设PK在两个表中都被命名为id

答案 1 :(得分:1)

merge into tableA a
using tableB b
on (a.id = b.id)
when matched then update set
--list columns here
when not matched then insert
--list columns to insert here
;

在一次交易中插入800k不应该太多。如果它太多,你应该使用bulk collect光标并在几步中拆分合并,只传递部分数据using。您需要为limit设置的bulk collect有多大,以便为最佳时间进行测试。