如何使用SQL Loader在表中存储.dat文件名

时间:2010-12-02 08:58:58

标签: oracle sql-loader

我有数百个数据文件都具有相同的结构,并且都需要加载到同一个表中。但是,表中有一个名为“filename”的额外列,我应该存储从那里加载数据的.dat文件的名称。

我知道我可以为每个.dat文件创建一个单独的控制文件,但这很难。任何人都可以建议更好的方法或如何从dat文件列表生成控制文件吗?

2 个答案:

答案 0 :(得分:1)

可能最简单的方法是使用不填充文件名列的单个控制文件,并在加载每个文件后使用SQLPlus执行更新,如:

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

因此,每个新的行集都加载了filename的NULL值,然后将所有具有NULL的行更新为当前文件名。

答案 1 :(得分:0)

有一大堆代码here用于派生CTL文件,但这取决于你的操作系统。

#!/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