【问题标题】:insert timestanp of INFILE into a column from SQLLOADER从 SQL LOADER 将 FILE 的时间戳插入列中
【发布时间】:2014-12-02 12:54:26
【问题描述】:

我有如下要求,

我正在通过 shell 为文件夹中的 CSV 文件调用 sqlldr 脚本,文件名也附有时间戳。

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

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

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

csv_file : cat file_csv_101010112233.csv

1111|1

2222|2

输出: 从 t1 中选择 *;

c1 c2 c3

1111 1 101010112233

2222 2 101010112233

注意:我不想要 sys 时间戳

【问题讨论】:

    标签: shell csv sql-loader


    【解决方案1】:

    我认为您将需要一个围绕调用 sqlldr 的 shell 脚本包装器。首先更改控制文件,使时间戳列具有如下占位符:

    ...
    C3 CONSTANT REPLACE_ME,
    ...
    

    并将其保存为模板。

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

    我正在考虑其他方法来做到这一点并想出了一个。可能不适合您的环境,但无论如何要记住一些事情。

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

    C3 "package.function"
    

    更多信息:SQL*Loader Field List Reference

    【讨论】:

    • 感谢@Gary 的建议,但如果我可以选择在命令行中向 sqlldr 发送一个常量值并使用与表字段的值相同的值,我将不胜感激。
    • 是的,我不相信这是可能的。
    • 用另一种方式将数据放入列中更新了帖子。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多