2010-12-29 5 views
0

CTLファイルを使用して、ファイルに格納されたデータをOracleデータベースの特定のテーブルにロードしています。私はCTLファイルで取得するためのパラメータを指定使用することが可能であるかどうかを知りたいCTLでパラメータを使用する

sqlldr user/[email protected] data=my_data_file control=my_loader.ctl 

: 現在、私は、次のコマンドラインを使用して、ローダファイルを起動します。

また、CTLがテーブルを埋めるために使用するデータファイルの名前を取得することは可能ですか?また、各行に挿入することもできます。私は現在、以前に挿入されたレコードを更新するプロシージャを呼び出す必要があります。

助けていただけたら幸いです!

答えて

0

私が知っているように、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

+0

感謝を。実際には、私のデータファイルの名前は、使用から別のものに変更されることになっています(それは生成された日付の日付を含むでしょう)ので、たとえ変数を使ってトリックを行っても、本当に私が探しているもの。 – Hal

+0

申し訳ありませんが、私の英語は十分ではありませんが、私の提案ではロードするたびに 'my_loader_yymmdd.ctl'を1列として動的に読み込むことができますか? – pinichi

+0

申し訳ありませんが私は十分にクリアされていない可能性があります。 CTLの名前ではなく、変更されるデータファイルの名前だけです。上記のコマンドラインを使用してCTLを起動します。ここでは、データファイルの名前とCTLの名前を指定します。私はコマンドラインとCTLの両方でそれを2回指定したくないので、CTL内のデータファイルの名前を取得したいと思います。限り私の研究は、私はまだこの問題の解決策を見つけることがあります。 – Hal

関連する問題