如何用SQLLDR加载毫秒级精度的日期?

问题描述 投票:0回答:1

我正在尝试用 sqlldr. 例如,我有一个日期,在我的csv导入文件中。 "2020-01-05-16.32.02.070000" 在我的csv导入文件中

在我的sqlldr控制文件中,我尝试了。 LASTMODIFIED DATE "YYYY-MM-DD-HH24.MI.SS.FF6",

但是sqlldr会抛出错误。 ORA-01821: date format not recognized

所以我可以把我的格式字符串改成 LASTMODIFIED DATE "YYYY-MM-DD-HH24.MI.SS",

当然如果加载失败是因为。

Record 43: Rejected - Error on table ORA_TIO_OWNER.REPORTER_STATUS, column LASTMODIFIED.
ORA-01830: format picture ends before converting entire input string

我可以从我的数据中排除亚秒级的精度,然后它就会很好地导入,但显然这是次优的。我怎样才能得到 sqlldr 来接受这些数据串?

PS. 我用SQL Developer检查了一下,看到目标表的小数配置是一样的。

更新了加载器控制文件

 load data
  2   infile 'REPORTER_JOURNAL.csv'
  3   into table ORA_TIO_OWNER.REPORTER_JOURNAL
  4   fields terminated by "," optionally enclosed by '"'
  5   ( CHRONO DATE "YYYY-MM-DD-HH24.MI.SS.FF", SERIAL INTEGER EXTERNAL, SERVERNAME CHAR, SERVERSERIAL INTEGER EXTERNAL, TEXT1 CHAR, TEXT10 CHAR, TEXT11 CHAR, TEXT12 CHAR, TEXT13 CHAR, TEXT14 CHAR, TEXT15 CHAR, TEXT16 CHAR, TEXT2 CHAR, TEXT3 CHAR, TEXT4 CHAR, TEXT5 CHAR, TEXT6 CHAR, TEXT7 CHAR, TEXT8 CHAR, TEXT9 CHAR, USERID INTEGER EXTERNAL )

那是非功能性的,给 ORA-01821: date format not recognized 如果我把它砍掉 .FF 它将加载削减版本的日期。

P.S. 不要担心不同的表名。我正在把一大堆数据从DB2迁移到Oracle,有很多表,但问题是所有表的名字都是一样的

oracle etl date-formatting sql-loader controlfile
1个回答
1
投票

试试。

LASTMODIFIED timestamp "YYYY-MM-DD-HH24.MI.SS.FF"

我可以在11.2.0.4和19c上运行下面的程序,没有错误。

$ cat ld.dat
"2020-01-05-16.32.02.070000"
$ cat ld.ctl
load data
infile 'ld.dat'
into table t 
fields terminated by "," optionally enclosed by '"'
(c timestamp "YYYY-MM-DD-HH24.MI.SS.FF")
$ sqlldr userid=system/oracle data=ld.dat control=ld.ctl

SQL*Loader: Release 11.2.0.4.0 - Production on Mon Jun 8 11:28:14 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 1
$ sqlplus system/oracle 
SQL> select * from t;

C
---------------------------------------------------------------------------
05-JAN-20 04.32.02.070000 PM

SQL> desc t;
 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 C                          TIMESTAMP(6) WITH LOCAL TIME
                             ZONE
© www.soinside.com 2019 - 2024. All rights reserved.