【发布时间】:2021-04-08 23:47:07
【问题描述】:
如何将两个不同表中的数据增量插入到另一个表中?
假设我有表 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, C.email, C.address) values(x.id, x.email, x.address);
end loop;
【问题讨论】:
-
我没有得到 using 部分 -> using( select x.col1 col1, x.col2 col2 from dual ) src。你能解释一下吗?
-
根据documentation for MERGE 语句,在单词 USING 之后可以有一个 SELECT 或一个表或视图的名称。在链接的答案中,他们使用子查询。为了访问游标的列,您需要某种 SELECT。因此,
SELECT ... FROM DUAL总是只返回一行。
标签: sql plsql sql-insert sql-merge