すべてが同じ構造を持ち、すべて同じテーブルにロードする必要がある何百ものデータ ファイルがあります。ただし、テーブルには「ファイル名」と呼ばれる追加の列があり、データがそこから読み込まれた .dat ファイルの名前を格納することになっています。
.dat ファイルごとに個別の制御ファイルを作成できることはわかっていますが、それは面倒です。datファイルのリストから制御ファイルを生成するより良い方法または方法を誰かが提案できますか?
すべてが同じ構造を持ち、すべて同じテーブルにロードする必要がある何百ものデータ ファイルがあります。ただし、テーブルには「ファイル名」と呼ばれる追加の列があり、データがそこから読み込まれた .dat ファイルの名前を格納することになっています。
.dat ファイルごとに個別の制御ファイルを作成できることはわかっていますが、それは面倒です。datファイルのリストから制御ファイルを生成するより良い方法または方法を誰かが提案できますか?
おそらく最も簡単な方法は、ファイル名列を設定しない単一の制御ファイルを使用し、各ファイルをロードした後、SQLPlus を使用して次のような更新を実行することです。
UPDATE table SET filename='&1' WHERE filename IS NULL;
したがって、行の新しいセットごとにファイル名に NULL 値がロードされ、NULL を持つすべての行が現在のファイル名に更新されます。
ここには CTL ファイルを派生させるためのコードのチャンクがありますが、OS によって多少異なります。
#!/bin/sh
cd `dirname $0`
file=`ls -rt fullpathofmyfileindir/*.csv | tail -1`
filename=`basename $file`
f=`echo $filename | cut -c 9-16`
cat LOAD_0.CTL > $1.ctl
echo $1
echo 'NOTIF_FILE_DATE "TO_DATE('\'$f\'','\'YYYYMMDD\'')",' >> $1.ctl
echo 'FILE_NAME CONSTANT '$1',' >> $1.ctl
echo 'NOTIF_ID "NOTIF_SEQ.NEXTVAL")' >> $1.ctl
sqlldr migration9c/migration@AXOT01 control=$1.ctl log=$1.log data=$1
rm $1.ctl