您的位置:首页 > 其它

导入导出时chr(13)和chr(10)的处理

2016-05-11 09:33 239 查看
今天做项目导入导出的时候遇到一个问题:(文字叙述有点乱



sqluldr导出的文件,然后使用sqlldr导入一张表结构完全一致的表时出现错误提示。

提示表的字符不匹配,以及字符长度超过限制

于是看了一下,导出来的文件以及表结构

表结构中有varchar(2000)的字段,在导出的文件中对比,发现该行出现断层(换行)

在sqluldr的命令中,在该字段加上  replace(a,chr(10),''),再次导出文件。

打开文件对比发现该字段还是会出现断层(换行),继续修改sqludr的命令

在该字段加上 replace(replace(a,chr(10),''),chr(13),''),再次导出文件。

打开文件,断层消失

总结:sqluldr导出的文件中如果出现断行,那么sqlldr导入的时候就会出现各种不匹配和超过限制。

至于chr(10)换行&chr(13)回车的区别,可以到linux换行都是/n,windows是/n和/r

实施sqlldr导入,提示失败

查看错误日志:

Record 1: Rejected - Error on table TEST01, column CREATE_DATE.

ORA-01861: literal does not match format string

字符不匹配,再次看看日志

CREDIT_DATE                          NEXT     *           CHARACTER   

         

    Terminator string : '@|@'

发现导入的格式CHARACTER    ,而表结构        CREDIT_DATE是date

所以需要转换一次

修改控制文件

 CREDIT_DATE "to_date(: CREDIT_DATE,'''yyyy-mm-dd hh24:mi:ss)"

同时对于字段超过255的字段需要特别指定字符长度

例如:DESC char(500)(注意是char而不是varchar)

总结:sqluldr导出时需要特别注意换行符和回车符,sqlldr导入时注意字段类型(特别是date)是否需要转换,字段的长度超过255的都需要特别指定长度char(lengh);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: