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

时间:2020-06-08 08:39:14

标签: oracle etl date-formatting sql-loader controlfile

我正在尝试使用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接受这些数据字符串?

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,并且有很多表,但是所有表的问题都是相同的

1 个答案:

答案 0 :(得分:1)

尝试:

cron

我可以在11.2.0.4和19c上运行以下命令而不会出错:

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