比较Oracle中的两个表

时间:2017-03-25 19:29:32

标签: oracle plsql sqlplus

我在oracle 10g(table1,table2)中有两个表,它们具有相同的列(A,B,C),但数据不同,我想比较table1中的A列和B列以及table2中的列和B ,如果A和B相似,我需要用table2中的C列更新table1的C列,如果它们不相似,我只需插入新行,我应该使用什么?

我尝试使用普通的SQL代码,当我有超过1个相似的行时没有工作,我应该用什么来遍历整个表?

3 个答案:

答案 0 :(得分:1)

您可以使用PL / SQL为您提供任何灵活性。 PL / SQL的格式如下:

declare 
cursor a is select * from table1; 
cursor b is select * from table2;

Begin 
For i in a 
Loop 
    for j in b 
     loop 
      if i.A=j.A & i.B=j.B then 
          ------DML operation 
     end loop; 
end Loop;

end;

答案 1 :(得分:0)

你可以使用merge语句insdie循环。

或者像这个例子一样在循环中进行简单的更新\插入:

Begin

For rec in (select * from table2)
Loop

Update table1
Set c = rec.c
Where a = rec.a and b= rec.b;

If sql%rowcount = 0 then
-- some insert
...
End if;

End loop;

End;

答案 2 :(得分:0)

(代表OP发布)

解决方案编号1:合并声明

merge into table1 A
using table2 B
on (A.A = B.A and A.B = B.B)
when matched then
update set A.C = B.C
when not matched then
insert (A,B,C) values(B.A,B.B,B.C);

解决方案编号2:光标和循环

cursor cur is select * from table2;
Begin

For rec in cur Loop

Update table1 Set c = rec.c Where a = rec.a and b= rec.b;

If sql%rowcount = 0 then 
insert into table1(a,b,c) values(rec.a,rec.b,rec.c); 


End if;

End loop;
end;