我试图使用SQL将数据加载到数据库中,但我的时间格式(与其他许多人一样)有问题。由于我在SQL方面的能力有限,我还没能找到以前的一篇文章来帮助我。就这么办了。
我试图插入的数据是:
"some text"|"some text"|"some text"|"23-APR-12 12.00.00.000000000 AM"|"some text"|"some text."|"TEXT"|"23-APR-12 12.00.00.000000000 AM"|"some text"|"some text"|"some text"|"some text"|0|
CTL文件如下所示:
OPTIONS (ERRORS=1586)
LOAD DATA
INFILE 'SOURCE.ldr' "str '{EOL}'"
APPEND
CONTINUEIF NEXT(1:1) = '#'
INTO TABLE "DATABASE_NAME"."TABLE"
FIELDS TERMINATED BY'|'
OPTIONALLY ENCLOSED BY '"' AND '"'
TRAILING NULLCOLS (
"DOMAIN" ,
"CONTEXT" ,
"KEY" ,
"CREATED" TIMESTAMP "DD-MON-RR HH.MI.SSXFF AM" ,
"DESCRIPTION" ,
"VALUE" ,
"TYPE" ,
"CHANGED" TIMESTAMP "DD-MON-RR HH.MI.SSXFF AM" ,
"CORPORATEENGLISHVALUE" ,
"CORPORATEVALUE" ,
"ENGLISHVALUE" ,
"OLDDBKEY" ,
"FAVOURITE" )
和表:
DOMAIN VARCHAR2(255 BYTE)
CONTEXT VARCHAR2(255 BYTE)
KEY VARCHAR2(255 BYTE)
CREATED TIMESTAMP(6)
DESCRIPTION VARCHAR2(255 BYTE)
VALUE VARCHAR2(4000 BYTE)
TYPE VARCHAR2(255 BYTE)
CHANGED TIMESTAMP(6)
CORPORATEENGLISHVALUE VARCHAR2(4000 CHAR)
CORPORATEVALUE VARCHAR2(4000 CHAR)
ENGLISHVALUE VARCHAR2(4000 CHAR)
OLDDBKEY VARCHAR2(35 BYTE)
FAVOURITE NUMBER(1,0)
Oracle数据库具有以下NLS:
Date Format: RRRR-MM-DD
Timestamp Format: RRRR-MM-DD HH24:MI:SSXFF
Timestamp TZ Format: RRRR-MM-DD HH24:MI:SSXFF TZR
我得到的错误是:
Record 1: Rejected - Error on table "DATABASE_NAME"."TABLE", column "CREATED".
ORA-26041: DATETIME/INTERVAL datatype conversion error
如果我手动将时间戳从23-APR-12 12.00.00.000000000 AM
修改为23-APR-12 12.00.00 AM
,它可以正常工作。所以我猜"CREATED" TIMESTAMP "DD-MON-RR HH.MI.SSXFF AM"
出了点问题。我还注意到,当月份显示不同时,同一个ORA-26041也会出现错误。在英语中,十月是OCT
,在瑞典语中是OKT
。如果我手动更改数据文件中月份的所有英文版本,脚本就能工作。
发布于 2013-10-15 07:49:06
首先,我会为此给出@AlexPoole的信条。他给我指明了正确的方向。
我坐在一台windows电脑上,这个例子来自Linux。正确的输入是:
set NLS_DATE_LANGUAGE=AMERICAN
请记住,您不能在NLS_DATE_LANGUAGE=AMERICAN
中有任何空白。我从目标数据库导出了一个设置,以查看它使用了哪些NLS设置,这样我就可以复制它。我做了一个简单的复制和粘贴错误。打印是这样做的:NLS_DATE_LANGUAGE = "AMERICAN"
(当它应该是NLS_DATE_LANGUAGE=AMERICAN
)。这解决了将英文日期转换为瑞典日期的问题。我想它应该适用于任何拼写不同的月份的人。
其次,要让数据库接受23-APR-12 12.00.00.000000000 AM
而不产生错误的时间,可以这样解决:
From: "CREATED" TIMESTAMP "DD-MON-RR HH.MI.SSXFF AM"
To: "CREATED" TIMESTAMP "DD-MON-RR HH.MI.SS.FF AM"
所以结束这一切。
要将英语月(10月、5月等)输入到windows环境中的非英语数据库中,请使用:set NLS_DATE_LANGUAGE=AMERICAN
。23-APR-12 12.00.00.000000000 AM
的正确时间格式是"DD-MON-RR HH.MI.SS.FF AM"
。
希望这能帮到其他人。
https://stackoverflow.com/questions/19315441
复制相似问题