- PR -

SQL*Loaderにて固定値を動的に変えたい

1
投稿者投稿内容
まりぽん
会議室デビュー日: 2006/04/09
投稿数: 13
投稿日時: 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
)


コントロールファイル自体を毎回作る仕組みを他処理にて
行えば、変数を利用しなくても可能なのだとは思いますが
出来れば、そのような事をしなくても良い方法を探しています
ので、わかる方がいましたらご教示ください。

よろしくお願いします。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-10-08 15:58
コントロールファイルを変数のバリエーション分作成して使い分ける。
そもそも、可変で作成可能だとして、その値をどうやって決定するのでしょうか?
まりぽん
会議室デビュー日: 2006/04/09
投稿数: 13
投稿日時: 2008-10-08 17:31
引用:

deannaさんの書き込み (2008-10-08 15:58) より:
コントロールファイルを変数のバリエーション分作成して使い分ける。
そもそも、可変で作成可能だとして、その値をどうやって決定するのでしょうか?


返信ありがとうございます。

値自体はテキストファイルで管理しています。
理想的な話になってしまいますが、バッチファイルにて
値を管理しているテキストファイルを読み込み、その値を
コントロールファイルに渡す(?)方法があれば解決できる
と思うのですが・・・。

基本的には私もコントロールファイル自体を複数用意する等
なんらかの方法で分けたり内製する以外に方法がないと思っています。

そもそも固定値なのに、可変になること自体がおかしい事なのですが
下っ端の私には意見がなかなかできないもので、解決する方法
があればと思って投稿させていただきました。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-08 18:02
コントロールファイルを読み込んで実行する前に、ALTER TABLE でカラムの初期値を変更してしまうとか…。
コントロールファイルでは、そのカラムに対しては常に初期値で INSERT を行う。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 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を変更すれば同じこと。
まりぽん
会議室デビュー日: 2006/04/09
投稿数: 13
投稿日時: 2008-10-14 10:55
返答が遅くなり申し訳ございません。

SQL*Loaderでは変数的な扱いは出来ないことがわかりましたので
結局、コントロールファイルを複数作る事で対応しました。
どうやら初期設定のマスタセットアップに使うバッチだという事が
後々わかったので、以上のような対応で問題ないと判断しました。
細かい内容を理解しないままの投稿となってしまい申し訳ございませんでした。

また一つ勉強になりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)