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

Oracle 如何使用SQLLDR加载毫秒精度日期,oracle,etl,date-formatting,sql-loader,controlfile,Oracle,Etl,Date Formatting,Sql Loader,Controlfile,我正在尝试使用sqlldr加载具有六位小数的日期字段。例如,我的csv导入文件中有一个日期:“2020-01-05-16.32.02.070000” 在sqlldr的控制文件中,我尝试了:LASTMODIFIED日期“YYYY-MM-DD-HH24.MI.SS.FF6”, 但是sqlldr抛出错误:ORA-01821:date格式无法识别 因此,我可以将格式字符串更改为上次修改日期“YYYY-MM-DD-HH24.MI.SS”, 当然,如果加载失败,原因是: Record 43: Rejecte

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

在sqlldr的控制文件中,我尝试了:
LASTMODIFIED日期“YYYY-MM-DD-HH24.MI.SS.FF6”,

但是sqlldr抛出错误:
ORA-01821: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格式无法识别
如果我关闭
.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

请提供您的sql加载器代码,以便查看并帮助您提出使用加载器控制文件更新的问题
LASTMODIFIED
的数据类型是什么?我的所有目标时间字段都是
时间戳(6)本地时区
给出:
ORA-01821:日期格式不可识别
并轰炸装载机您的4位Oracle版本是什么?Oracle版本:12.1.0.2我无法重现您的问题(请参阅我的更新答案)。请尝试发布