如何使用 SQLLDR 加载毫秒精度日期



我正在尝试使用sqlldr加载具有六个小数位的日期字段。例如,我的 csv 导入文件中有一个日期:
"2020-01-05-16.32.02.070000"

在我的 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接受这些数据字符串?

附言。我已经与SQL开发人员进行了检查,并看到目标表配置为具有相同的小数位数。

使用加载程序控制文件更新

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它将加载日期的削减版本。

附言:不用担心不同的表名。我正在将一大堆数据从 DB2 迁移到 Oracle,并且有很多表,但问题在它们之间是相同的

尝试:

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

最新更新