0

我有一个客户的 CSV 文件不包含任何日期。他们想要一个时间戳来指示每一行何时加载到他们的 Oracle 11g 数据库中。CSV 文件由供应商提供,因此我无法修改该文件。我尝试添加默认列值和“插入后”触发器,但没有运气。(性能不是问题,因为这是一个非工作时间流程)。

控制文件如下所示:

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) 

还有其他想法吗?谢谢。

4

1 回答 1

0

添加一个默认值为 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>

因此,您需要更详细地解释为什么它在您的情况下不起作用。


我注意到在您的示例中,您已将列创建为 DATE 数据类型。这意味着它将把默认的 SYSTIMESTAMP 截断到最接近的秒数。如果您需要时间戳值,则需要使用 TIMESTAMP 数据类型。

于 2011-04-25T14:23:25.183 回答