1

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

我知道我可以为每个 .dat 文件创建一个单独的控制文件,但这样做很痛苦。谁能提出更好的方法或如何从 dat 文件列表中生成控制文件?

4

2 回答 2

1

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

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

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

于 2010-12-02T14:58:14.587 回答
0

这里有大量用于派生 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
于 2010-12-02T23:41:03.577 回答