将FILE的时间戳插入SQL LOADER的列中

时间:2014-12-02 12:54:27

标签: shell csv sql-loader

我有如下要求,

我通过shell为文件夹中的CSV文件调用sqlldr脚本,文件名也附有Timestamp。

我需要将该时间戳插入到表的列中。请建议我如何实现这一目标。

例如: 表: t1(c1 varchar,c2 varchar,c3时间戳);

控制文件:  加载数据  infile'file.csv'  附加  进入表t1  字段以“|”结尾追踪NULLCOLS  (c1,c2)

csv_file:cat file_csv_101010112233.csv

1111 | 1

2222 | 2

输出: select * from t1;

c1 c2 c3

1111 1 101010112233

2222 2 101010112233

注意:我不想要sys时间戳

1 个答案:

答案 0 :(得分:2)

我认为你需要一个围绕调用sqlldr的shell脚本包装器。首先更改控制文件,以便timestamp列具有占位符,如:

...
C3 CONSTANT REPLACE_ME,
...

并将其另存为模板。

包装器应备份原始csv文件,从文件名中获取时间戳,然后使用sed之类的东西替换模板控制文件中的“REPLACE_ME”文本和保存的时间戳数据并将其保存到工作副本,然后使用工作副本调用Sqlldr。

我正在考虑其他方法,并想出了一个。可能对您的环境不可行,但无论如何都要记住。

如果您可以将数据文件名称放入一列(例如,可能在加载开始时填充的load_log表),您可以通过调用返回名称的函数来分配它:

C3 "package.function"

更多信息:SQL*Loader Field List Reference