首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlldr: ORA-01861:文字不匹配格式字符串

sqlldr: ORA-01861:文字不匹配格式字符串
EN

Stack Overflow用户
提问于 2014-03-19 16:14:06
回答 1查看 6.2K关注 0票数 2

在将简单(YYYY-MM-DD)格式的日期字符串加载到Oracle 11g中时,我获得了Oracle 'ORA-01861:文字不匹配格式字符串‘:

我的桌子DDL是:

代码语言:javascript
运行
复制
CREATE TABLE fp_basic_dividends (
fs_perm_sec_id VARCHAR(20) NOT NULL,
"DATE" DATE NOT NULL,
currency CHAR(3) NOT NULL,
adjdate DATE NOT NULL,
p_divs_pd FLOAT(53) NOT NULL,
p_divs_paydatec DATE NULL,
p_divs_recdatec DATE NULL,
p_divs_s_spinoff CHAR(1) NOT NULL,
p_divs_s_pd FLOAT(53) NULL,
PRIMARY KEY (fs_perm_sec_id, "DATE"));

我的sqlldr ctl文件是:

代码语言:javascript
运行
复制
load data
append
into table fp_basic_dividends
fields terminated by "|" optionally enclosed by '"'
TRAILING NULLCOLS
(
FS_PERM_SEC_ID CHAR(20),
"DATE" DATE "YYYY-MM-DD",
CURRENCY CHAR(3),
ADJDATE DATE "YYYY-MM-DD",
P_DIVS_PD FLOAT,
P_DIVS_PAYDATEC DATE "YYYY-MM-DD",
P_DIVS_RECDATEC DATE "YYYY-MM-DD",
P_DIVS_S_SPINOFF,
P_DIVS_S_PD FLOAT
)

示例数据是:

代码语言:javascript
运行
复制
"XXXXRR-S-US"|1997-09-30|"UAH"|1997-09-30|.0126400003|1997-10-01|1997-09-29|"0"|

结果日志文件内容是:

代码语言:javascript
运行
复制
Table FP_BASIC_DIVIDENDS, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
FS_PERM_SEC_ID                      FIRST    20   |  O(") CHARACTER            
"DATE"                               NEXT     *   |  O(") DATE YYYY-MM-DD      
CURRENCY                             NEXT     3   |  O(") CHARACTER            
ADJDATE                              NEXT     *   |  O(") DATE YYYY-MM-DD      
P_DIVS_PD                            NEXT     4           FLOAT                
P_DIVS_PAYDATEC                      NEXT     *   |  O(") DATE YYYY-MM-DD      
P_DIVS_RECDATEC                      NEXT     *   |  O(") DATE YYYY-MM-DD      
P_DIVS_S_SPINOFF                     NEXT     *   |  O(") CHARACTER            
P_DIVS_S_PD                          NEXT     4           FLOAT                

Record 1: Rejected - Error on table FP_BASIC_DIVIDENDS, column P_DIVS_PAYDATEC.
ORA-01861: literal does not match format string

我做错了什么?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 16:25:50

我认为问题在于PD_DIVS_PD FLOAT,

看起来,您在数据文件中拥有的是真正的字符数据(VARCHAR),而不是固定长度的二进制表示。

要使SQL*Loader从字符表示形式转换,我认为必须将数据类型限定为EXTERNAL,例如:

代码语言:javascript
运行
复制
PD_DIVS_PD FLOAT EXTERNAL, 

这是我认为正在发生的事情..。我认为SQL*Loader为PD_DIVS_PD FLOAT字段收集了整整四个字节,

代码语言:javascript
运行
复制
'.012'

他没有把它看作是一个角色,也没有把它看作是一个价值1.2E-02。他将这四个字节看作浮点数的内部二进制表示(位表示符号,一定数量的位表示指数,一定数量的位表示尾数)。

然后,对于下一个字段,他将从下一个位置开始,获取'6400003' (直到下一个字段分隔符),然后尝试将其转换为日期。

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

https://stackoverflow.com/questions/22511874

复制
相关文章

相似问题

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