質問 |
||
| QNo.3576325 | SQL*Loaderで既存のレコードの更新 | |
|---|---|---|
| 質問者:nissi9990 |
SQL*Loaderで既存のレコードがあったらUpdate処理を行いたいのですが 「Oracle7 Server ユーティリティ」に SQL*Loaderは、既存レコードがNULL列であったとしてもレコードを更新しません。 既存の行を更新するには、次の手順を利用してください。 1.データを一時表にロードする 2.相関副問合わせを持つSQL言語のUPDATE文を使用する 3.一時表を削除する とありますが、上記の1〜3が具体的にどうすれば良いのか分りません・・・ 1.データとは、テーブルのデータ?それともロードファイルのデータ?? 3.に削除とあるので、作成するのでしょうか?? 2・これはctlファイルに記述するでいいのでしょうか?? 記述の仕方は?? 3.ドロップコマンドはctlに記述でよろしいのでしょうか?? などなど・・ すみません、ご教授お願いできませんか?? |
|
困り度:
|
||
| 質問投稿日時: 07/12/06 18:37 |
||
回答良回答20pt |
|
| ANo.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 | |
| 種類:回答 どんな人:経験者 自信:参考意見 |
|
| 回答日時: 07/12/09 23:00 |
|
| |
| この回答へのお礼 | chiychiyさん 返信が遅れてすみません。。。 ctlファイルは一時表にロードのみで更新はsqlですね!! イメージがわきました!! ありがとうございます。丁寧な説明でとても理解しやすかったです。 |