同じ列(A、B、C)を持つ異なるOracle 10g(table1、table2)に2つのテーブルがありますが、テーブル1の列AとBをAとBが似ている場合は、table2からBとBを作成する必要があります。私はtable2のC列を使ってtable1のC列を更新する必要があります。Oracleの2つのテーブルを比較します
私は通常のSQLコードで試してみましたが、2つ以上の類似した行がある場合は動作しませんでした。テーブル全体を調べるにはどうすればよいですか?
同じ列(A、B、C)を持つ異なるOracle 10g(table1、table2)に2つのテーブルがありますが、テーブル1の列AとBをAとBが似ている場合は、table2からBとBを作成する必要があります。私はtable2のC列を使ってtable1のC列を更新する必要があります。Oracleの2つのテーブルを比較します
私は通常のSQLコードで試してみましたが、2つ以上の類似した行がある場合は動作しませんでした。テーブル全体を調べるにはどうすればよいですか?
(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);
ソリューションnumber2のマージ:カーソルとループの
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;
これに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;
あなたがループinsdie MERGE文を使用することができます。
またはこの例のようなループでは、単純な更新\挿入:
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;
ありがとう、とてもうまくいった! – zenami
は、それは私をたくさん助けた、ありがとうございました! – zenami
@halfer今は大丈夫ですか? – smshafiqulislam
はい、それは素晴らしいことです!編集していただきありがとうございます。 – halfer