2010-12-02 10 views
1

すべて同じ構造を持ち、すべて同じテーブルにロードする必要がある数百のデータファイルがあります。しかし、テーブルには "filename"という余分な列があり、データがそこからロードされた.datファイルの名前を格納することになっています。SQLローダーを使用してテーブルに.datファイル名を格納する方法

私はそれぞれの.datファイルに対して別々の制御ファイルを作成することができますが、それは苦労です。誰もが良い方法を提案するか、またはdatファイルのリストから制御ファイルを生成する方法はありますか?

答えて

1

おそらく最も簡単な方法は、ファイル名の列を移入しない単一の制御ファイルを使用することであり、同様に更新を実行するために、各ファイル使用sqlplusとロードした後:

UPDATE table SET filename='&1' WHERE filename IS NULL; 

ので、行のそれぞれの新しいセットですfilenameにNULL値がロードされている場合は、NULLを持つすべてのローを現在のファイル名に更新します。

+0

ロードする前に、ALTER TABLE MODIFY COLUMNファイル名DEFAULT 'xxxx'を実行することはできません。 –

0

CTLファイルの派生にはコードhereがありますが、その種類は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/[email protected] control=$1.ctl log=$1.log data=$1 
rm $1.ctl 
関連する問題