问题描述
如何将两个不同表中的数据增量插入到另一个表中?
假设我有表 A 和 B,我想将行增量插入表 C。行应该只插入一次(如果该行已经存在,则不应插入任何内容)并且不要在表 C 中更新或删除。
我认为它可以在循环中使用游标,然后如果不匹配则合并并插入数据。我是不是完全错了,因为我收到错误消息“表或视图不存在”。
for x in A --cursor with data from given table
loop
MERGE INTO C USING A
ON (x.id = C.id)
WHEN NOT MATCHED THEN
insert(C.id,C.email,C.address) values(x.id,x.email,x.address);
end loop;
for x in B --cursor with data from given table
loop
MERGE INTO C USING B
ON (x.id = C.id)
WHEN NOT MATCHED THEN
insert(C.id,x.address);
end loop;
解决方法
Merge 需要一个 select 语句,而不是一个游标。某处您的代码“光标A是选择...”,然后尝试“使用合并入表(A)...”不过合并需要一个实际的选择。正确的格式是“merge into c using(select ...) A”并去掉光标。
merge into c
using ( select id,email,address
from a
) x
on (x.id = c.id)
when not matched then
insert(c.id,c.email,c.address)
values(x.id,x.email,x.address);
merge into c
using ( select id,address
from b
) x
on (x.id = c.id)
when not matched then
insert(c.id,x.address);