【发布时间】:2020-09-27 04:29:18
【问题描述】:
我正在尝试使用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,它将加载日期的缩减版本。
附:不要担心不同的表名。我正在将一大堆数据从 DB2 迁移到 Oracle,并且有很多表,但问题都是一样的
【问题讨论】:
-
请提供您的sql loader代码,以便您查看和帮助
-
使用加载器控制文件更新问题
-
LASTMODIFIED的数据类型是什么? -
我所有的目标时间字段都是
TIMESTAMP(6) WITH LOCAL TIME ZONE
标签: oracle etl date-formatting sql-loader controlfile