首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ORA-26041:日期时间/间隔数据类型转换错误

ORA-26041:日期时间/间隔数据类型转换错误
EN

Stack Overflow用户
提问于 2013-10-11 10:03:22
回答 1查看 7.3K关注 0票数 1

我试图使用SQL将数据加载到数据库中,但我的时间格式(与其他许多人一样)有问题。由于我在SQL方面的能力有限,我还没能找到以前的一篇文章来帮助我。就这么办了。

我试图插入的数据是:

代码语言:javascript
复制
"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文件如下所示:

代码语言:javascript
复制
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" )

和表:

代码语言:javascript
复制
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:

代码语言:javascript
复制
Date Format:         RRRR-MM-DD
Timestamp Format:    RRRR-MM-DD HH24:MI:SSXFF
Timestamp TZ Format: RRRR-MM-DD HH24:MI:SSXFF TZR

我得到的错误是:

代码语言:javascript
复制
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。如果我手动更改数据文件中月份的所有英文版本,脚本就能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-15 07:49:06

首先,我会为此给出@AlexPoole的信条。他给我指明了正确的方向。

我坐在一台windows电脑上,这个例子来自Linux。正确的输入是:

代码语言:javascript
复制
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而不产生错误的时间,可以这样解决:

代码语言:javascript
复制
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=AMERICAN23-APR-12 12.00.00.000000000 AM的正确时间格式是"DD-MON-RR HH.MI.SS.FF AM"

希望这能帮到其他人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19315441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档