Oracle 将数据库时间戳添加到SQL加载程序CSV导入
我有一个客户的CSV文件不包含任何日期。他们希望有一个时间戳来指示每一行何时加载到Oracle 11g数据库中。CSV文件由供应商提供,因此我无法修改该文件。我曾尝试添加默认列值和“插入后”触发器,但没有成功。(性能不是问题,因为这是一个非工作时间的过程) 控制文件如下所示:Oracle 将数据库时间戳添加到SQL加载程序CSV导入,oracle,excel,csv,timestamp,sql-loader,Oracle,Excel,Csv,Timestamp,Sql Loader,我有一个客户的CSV文件不包含任何日期。他们希望有一个时间戳来指示每一行何时加载到Oracle 11g数据库中。CSV文件由供应商提供,因此我无法修改该文件。我曾尝试添加默认列值和“插入后”触发器,但没有成功。(性能不是问题,因为这是一个非工作时间的过程) 控制文件如下所示: options (skip=1, direct=true, rows=10000) load data infile data.dat badfile sqldatatxtdata.bad replace in
options (skip=1, direct=true, rows=10000)
load data
infile data.dat
badfile sqldatatxtdata.bad
replace
into table LAM.CSV_DATA_TXT
fields terminated by ','
trailing nullcols
(ASSET, ASSET_CLASS, MATURITY, PRICE)
该表如下所示:
create table LAM.CSV_DATA_TXT (
ASSET VARCHAR2(20),
ASSET_CLASS VARCHAR2(50),
MATURITY varchar2(50),
PRICE NUMBER(12,8),
DATE_TIMESTAMP DATE default(SYSTIMESTAMP)
还有其他想法吗?谢谢。添加默认值为SYSTIMESTAMP的TIMESTAMP列应该可以:
SQL> create table t23
2 ( id number not null
3 , ts timestamp default systimestamp not null)
4 /
Table created.
SQL> insert into t23 (id) values (9999)
2 /
1 row created.
SQL> select * from t23
2 /
ID TS
---------- -------------------------
9999 25-APR-11 15.21.01.495000
SQL>
因此,您需要更详细地解释为什么它在您的案例中不起作用
我注意到,在您的示例中,您已经将列创建为日期数据类型。这意味着它将把默认的SYSTIMESTAMP截断到最接近的秒。如果需要时间戳值,则需要使用时间戳数据类型。“但运气不佳。”请详细说明这是什么意思。你有错误吗?加载失败了吗?还是该列留空?你给我们的细节越多,我们就越有可能帮助你。我真的想出来了。这是一个承诺问题。当使用SQL Loader将csv文件加载到数据库中时,需要设置direct=false。这将允许您在数据库中使用列默认值。如果设置为true,则不会填充。