- - PR -
テーブルデータの移行
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-27 13:32
お世話になります。
Oracle初心者です。 只今、Oracleの複数のテーブルデータから一つのテーブル(TBL_C)にデータを移行したいのですがどうやれば実現できるか、悩んでおります。 ▼テーブル構成 TBL_A ・BANGO ・USER_ID ・TOROKU_BI TBL_B ・BANGO ・DATA01 ・DATA02 TBL_C ・BANGO ・STATUS ・USER_ID ・TOROKU_BI ▼やりたいこと 1.TBL_AのBANGOを TBL_Cにセット 2.TBL_AのUSER_IDを TBL_Cにセット 3.TBL_AのTOROKU_BIをTBL_Cにセット 4.TBL_AとTBL_B のBANGOが一致した場合は TBL_CのSTATUSに"1"をセット 一致しない場合は"0"をセット ※ 1〜3までは以下の文で実現できることは確認と感じていますが、 4をどうやればよいかわかりません 参考になるサイトなどお教えいただけますと助かります。 どうぞよろしくお願いします。 declare CURSOR c1 IS SELECT * FROM TBL_A; BEGIN --TBL_A FOR r1 IN c1 loop INSERT INTO TBL_C VALUES( r1.BANGO, ???, r1.USER_ID, r1.TOROKU_BI); end loop; end; | ||||
|
投稿日時: 2007-08-27 13:59
TBL_AとTBL_Bをouter join
| ||||
|
投稿日時: 2007-08-27 14:31
KOXさんに対する補足
outer joinしたとき、TBL_Bにレコードがない場合、TBL_B.BANGO がNULLになるので、 NULLなら0、それ以外は1をセットする。 NULL判定はcase句を使えば実現できるでしょう。 バージョン書いてないから、caseが使えないかもしれないけど・・・ 蛇足になりますが、今回の場合、ループを回しながらのinsert 〜 valueではなく、insert 〜selectの方が良いと思います。 #まぁ、移行だけだからどっちでも構わないっちゃー、構わない話だけど | ||||
|
投稿日時: 2007-08-27 16:00
Oracleの環境がないのですが。。。
ループさせなくても、insert〜select一発で実現可能です。 下記SQL例ではcase式を使っていますが、古いバージョンならdecode関数を使えば 可能と思います。
| ||||
|
投稿日時: 2007-08-27 17:27
KOXさん、かずくんさん、忠犬さん
早速のご回答ありがとうございます。 忠犬さん、ズバリ答えを教えていただだきとても助かりました。 ありがとうございました。 | ||||
|
投稿日時: 2007-08-28 08:57
本当に解決したのでしょうか?
単純にLEFT JOINだと、TBL_BにあってTBL_Aに無いBANGOは移行されませんが、 それは問題になりませんか? |
1