私が知っているように、ctrlで変数としてパラメータを渡す方法はありません。
しかし、ctlで定数を使用し、cltファイルを変更して、ロード時間ごとに定数値(ctlファイルの内容)を変更することができます。
編集:より具体的には、
my_loader.ctl:
--options
load data
infile 'c:\$datfilename$' --this is optional, you can specify here or from command line
into table mytable
fields....
(
datafilename constant '$datfilename$', -- will be replace by real datafname each load
datacol1 char(1),
....
)
dataload.bat:その$のdatfilename $を前提としたテキストは、データ・ファイルの名前で置き換えになりますです。
::sample copy
copy my_loader.ctl my_loader_temp.ctl
::replace the name of datafile (mainly the content to load into table's data column)
findandreplace my_loader_temp.ctl "$datafilename$" "%1"
::load
sqlldr user/[email protected] data=%1 control=my_loader_temp.ctl
::or with data be obmitted if you specified by infile in control file.
sqlldr user/[email protected] control=my_loader_temp.ctl
使用して:あなたの答えのためのdataload.bat mydatafile_2010_10_10.txt
感謝を。実際には、私のデータファイルの名前は、使用から別のものに変更されることになっています(それは生成された日付の日付を含むでしょう)ので、たとえ変数を使ってトリックを行っても、本当に私が探しているもの。 – Hal
申し訳ありませんが、私の英語は十分ではありませんが、私の提案ではロードするたびに 'my_loader_yymmdd.ctl'を1列として動的に読み込むことができますか? – pinichi
申し訳ありませんが私は十分にクリアされていない可能性があります。 CTLの名前ではなく、変更されるデータファイルの名前だけです。上記のコマンドラインを使用してCTLを起動します。ここでは、データファイルの名前とCTLの名前を指定します。私はコマンドラインとCTLの両方でそれを2回指定したくないので、CTL内のデータファイルの名前を取得したいと思います。限り私の研究は、私はまだこの問題の解決策を見つけることがあります。 – Hal