- ベストアンサー
SQL*Loaderで既存のレコードの更新
SQL*Loaderで既存のレコードがあったらUpdate処理を行いたいのですが 「Oracle7 Server ユーティリティ」に SQL*Loaderは、既存レコードがNULL列であったとしてもレコードを更新しません。 既存の行を更新するには、次の手順を利用してください。 1.データを一時表にロードする 2.相関副問合わせを持つSQL言語のUPDATE文を使用する 3.一時表を削除する とありますが、上記の1~3が具体的にどうすれば良いのか分りません・・・ 1.データとは、テーブルのデータ?それともロードファイルのデータ?? 3.に削除とあるので、作成するのでしょうか?? 2・これはctlファイルに記述するでいいのでしょうか?? 記述の仕方は?? 3.ドロップコマンドはctlに記述でよろしいのでしょうか?? などなど・・ すみません、ご教授お願いできませんか??
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >1.データを一時表にロードする >2.相関副問合わせを持つSQL言語のUPDATE文を使用する >3.一時表を削除する 以下に、私なりの解釈を記載いたします。 1.について ここでいうデータとは、SQL*Loaderでロードをしようとしているデータの事だと思います。 ロード対象と同じテーブル定義を持つテーブルを、以下のコマンドなどを使用して、一時的に作成し、作成した一時表にSQL*Loaderでデータをロードします。 SQL>create table <任意の一時表名> as select * from <ロード対象の表> where 1=0; 以下、説明を簡略化するために、上記の 任意の一時表名をA、ロード対象の表をBとします。 2.について ctlファイルに記述するのではなく、実際にSQLを記述して実行することだと思います。 表Aを、一致する表Bの列で、相関副問い合わせで更新します。 3.について 1で作成した、一時表を削除します。 drop table B; 総括して、SQL*Loaderには、 既存のレコードがあったら更新する機能はないので、 一時的な表を作って、その表にデータをロードし、 SQL文で更新作業を行うということだと思います。 ご参考いただければ幸いです。
お礼
chiychiyさん 返信が遅れてすみません。。。 ctlファイルは一時表にロードのみで更新はsqlですね!! イメージがわきました!! ありがとうございます。丁寧な説明でとても理解しやすかったです。