如何在 PL/SQL 中增量集成数据

问题描述

如何将两个不同表中的数据增量插入到另一个表中?

假设我有表 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);