我正在尝试使用SQL-Loader将数据加载到数据库中,但我(和许多其他人一样)对我的时间格式有问题。由于我使用SQL-Loader的技能有限,我找不到以前会帮助我的帖子。所以这里。
我要插入的数据是:
"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会出现错误。在英语中,10月显示为OCT
,瑞典语显示为OKT
。如果我手动更改数据文件中月份的所有英文版本,则脚本可以正常工作。
答案 0 :(得分:1)
首先,我将给予@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"
要在Windows环境中将英语月份(OCT,MAY等)输入非英语数据库,请使用:set NLS_DATE_LANGUAGE=AMERICAN
。 23-APR-12 12.00.00.000000000 AM
的正确时间格式为"DD-MON-RR HH.MI.SS.FF AM"
。
希望这有助于其他任何人。