我有如下要求,
我通过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时间戳
答案 0 :(得分:2)
我认为你需要一个围绕调用sqlldr的shell脚本包装器。首先更改控制文件,以便timestamp列具有占位符,如:
...
C3 CONSTANT REPLACE_ME,
...
并将其另存为模板。
包装器应备份原始csv文件,从文件名中获取时间戳,然后使用sed之类的东西替换模板控制文件中的“REPLACE_ME”文本和保存的时间戳数据并将其保存到工作副本,然后使用工作副本调用Sqlldr。
我正在考虑其他方法,并想出了一个。可能对您的环境不可行,但无论如何都要记住。
如果您可以将数据文件名称放入一列(例如,可能在加载开始时填充的load_log表),您可以通过调用返回名称的函数来分配它:
C3 "package.function"