2017-03-25 13 views
0

同じ列(A、B、C)を持つ異なるOracle 10g(table1、table2)に2つのテーブルがありますが、テーブル1の列AとBをAとBが似ている場合は、table2からBとBを作成する必要があります。私はtable2のC列を使ってtable1のC列を更新する必要があります。Oracleの2つのテーブルを比較します

私は通常のSQLコードで試してみましたが、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); 

ソリューション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; 
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; 
+0

は、それは私をたくさん助けた、ありがとうございました! – zenami

+0

@halfer今は大丈夫ですか? – smshafiqulislam

+0

はい、それは素晴らしいことです!編集していただきありがとうございます。 – halfer

0

あなたがループ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; 
+0

ありがとう、とてもうまくいった! – zenami

関連する問題