- - PR -
SQL*Loaderにて固定値を動的に変えたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-10-08 10:36
OracleのSQL*Loaderを利用し、バッチ(Windows)にて
テーブルにインサートさせる処理を考えているのですが あるカラムに対して固定値を設定させたいのですが その固定値が毎回変動するため、コントロールファイル内の 固定値の部分を変数的なものにし、置き換えられる(もしくは 引数として渡せる等)ようにしたいのですが、実現可能でしょうか? サンプルコントロールファイル LOAD DATA INFILE 'test.csv' APPEND INTO TABLE TEST FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( TEST1 constant 変数A, TEST2 ) コントロールファイル自体を毎回作る仕組みを他処理にて 行えば、変数を利用しなくても可能なのだとは思いますが 出来れば、そのような事をしなくても良い方法を探しています ので、わかる方がいましたらご教示ください。 よろしくお願いします。 | ||||
|
投稿日時: 2008-10-08 15:58
コントロールファイルを変数のバリエーション分作成して使い分ける。
そもそも、可変で作成可能だとして、その値をどうやって決定するのでしょうか? | ||||
|
投稿日時: 2008-10-08 17:31
返信ありがとうございます。 値自体はテキストファイルで管理しています。 理想的な話になってしまいますが、バッチファイルにて 値を管理しているテキストファイルを読み込み、その値を コントロールファイルに渡す(?)方法があれば解決できる と思うのですが・・・。 基本的には私もコントロールファイル自体を複数用意する等 なんらかの方法で分けたり内製する以外に方法がないと思っています。 そもそも固定値なのに、可変になること自体がおかしい事なのですが 下っ端の私には意見がなかなかできないもので、解決する方法 があればと思って投稿させていただきました。 | ||||
|
投稿日時: 2008-10-08 18:02
コントロールファイルを読み込んで実行する前に、ALTER TABLE でカラムの初期値を変更してしまうとか…。
コントロールファイルでは、そのカラムに対しては常に初期値で INSERT を行う。 | ||||
|
投稿日時: 2008-10-08 22:53
泥臭い方法ですが、
LOAD DATA INFILE 'test.csv' APPEND INTO TABLE TEST FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( ここまでをhead.txtにする。 ,TEST2 ) ここをtail.txtにする。 TEST1 constant 変数A これをvar.txtとして実行までに変数Aの値を設定しておく。 copy head.txt+var.txt+tail.txt loader.ctl と、ここまで書いたが、var.txtを修正/変更するくらいなら、全体を一つのファイルに 記述して変数Aを変更すれば同じこと。 | ||||
|
投稿日時: 2008-10-14 10:55
返答が遅くなり申し訳ございません。
SQL*Loaderでは変数的な扱いは出来ないことがわかりましたので 結局、コントロールファイルを複数作る事で対応しました。 どうやら初期設定のマスタセットアップに使うバッチだという事が 後々わかったので、以上のような対応で問題ないと判断しました。 細かい内容を理解しないままの投稿となってしまい申し訳ございませんでした。 また一つ勉強になりました。 ありがとうございました。 |
1