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

发布于 2024-10-06 07:08:20 字数 164 浏览 4 评论 0原文

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

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

I have hundreds of data files that all have the same structure and all need to be loaded into the same table. However, there is an extra column called "filename" in the table, and I am supposed to store the name of the .dat file the data was loaded from in there.

I know I could create a separate control file for each .dat file but that is a pain to do. Can anyone suggest a better way or how to generate the control files from a list of dat files?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一身仙ぐ女味 2024-10-13 07:08:20

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

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

因此,每个新的行集都加载文件名的 NULL 值,然后更新当前文件名包含 NULL 的所有行。

Probably the easiest thing is to use a single control file that does not populate the filename column, and after loading each file use SQLPlus to execute an update like:

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

So each new set of rows is loaded with a NULL value for filename, then you update all the rows that have NULL to the current filename.

胡大本事 2024-10-13 07:08:20

这里有一段代码用于派生 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

There's a chunk of code here for deriving CTL files, but it sort of depends on your 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文