免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8266 | 回复: 7
打印 上一主题 下一主题

将数据sqlldr到oracle发现明显字段长度足够,但无法导入,问题出在哪里? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-28 13:11 |只看该作者 |倒序浏览
我要实现是是从DB2 export出数据来,导入到ORALCLE中,操作系统均为AIX

如某个表的“备注”字段,在DB2中长度  VARCHAR 256 ; 在oracle数据库中长度  VARCHAR2(300)
但sqlldr时报:

Record 376032: Rejected - Error on table PLS_ASSUREINFO_QH_090731, column 备注.
Field in data file exceeds maximum length

备注内容如下:

安局特警中队公务员,妻张山,我行个金部员工,担保人家庭年收入12万元,建议发放该笔贷款,期限三年,分期付息一次还本,执行基准利率,请审批!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
2 [报告]
发表于 2009-08-28 14:23 |只看该作者
控制文件是怎么写的?

ps:最后给的是bad文件中取出的记录?

论坛徽章:
0
3 [报告]
发表于 2009-08-28 15:06 |只看该作者
原帖由 Minsic 于 2009-8-28 14:23 发表
控制文件是怎么写的?

ps:最后给的是bad文件中取出的记录?



ctl文件内容如下:
LOAD DATA
INFILE './1.del'
Append
continueif last !='^N'
INTO TABLE mytable_01
fields terminated by "^O" optionally enclosed by '"'
TRAILING NULLCOLS (
担保合同号,
机构号,
合同类型,
合同号,
担保人类型,
担保人客户号,
保证起始日              DATE 'YYYY-MM-DD',
保证到期日              DATE 'YYYY-MM-DD',
保证状态,
币种,
保证金额,
额度,
是否有保证金标志,
保证金编号,
保证金账号,
备注,
时间戳          TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF',
扩展标志位,
扩展域
)

bad文件内容如下:(只有一行),文字部分为备注字段,刚好256个字节
2008335444400006^O335105^O1^O335900444444402300006^O1^O33594444400825^O2008-10-25^O2011-10-25^O0^OCNY^O+10000000.^O+0.
^O0^O                    ^O                     ^O陆露露,我分行员工,年收入6万。因装修文苑一村111幢521室77.61平米住宅,
申请个人循环贷款额度10万,由郭楼儿提供担保,其系公安局特警中队公务员,妻郭人,我行个金部员工,担保人家庭年收入12万元,建
议发放该笔贷款,期限三年,分期付息一次还本,执行基准利率,请审批!^O2008-10-21-12.10.41.251000^O^O^O^N

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
4 [报告]
发表于 2009-08-28 15:36 |只看该作者
控制文件中字符类型默认的长度是255,尝试为备注字段指定长度吧:备注 char(300)

论坛徽章:
0
5 [报告]
发表于 2009-08-28 15:45 |只看该作者

回复 #4 Minsic 的帖子

我定义的是 VARCHAR2(300)
,那应该是制定为:备注 VARCHAR2(300)



我在生产上查了一下字符集合也是对的,如下:
create table test_zqh5( NAME      VARCHAR2(50));
insert into test_zqh5  values ('测试');
SQL> select length(t.name),lengthb(t.name) from test_zqh5 t;

LENGTH(T.NAME) LENGTHB(T.NAME)
-------------- ---------------
             2               4

SQL> select parameter,value from nls_database_parameters where parameter like 'NLS_CHARACTERSET';

PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
ZHS16GBK


SQL>

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
6 [报告]
发表于 2009-08-28 15:59 |只看该作者

回复 #5 zhaoqinghu 的帖子

我的意思是:

修改控制文件里面备注字段的长度的描述。

论坛徽章:
0
7 [报告]
发表于 2009-08-28 16:19 |只看该作者
原帖由 Minsic 于 2009-8-28 15:59 发表
我的意思是:

修改控制文件里面备注字段的长度的描述。



非常感谢老兄的帮助!!!
一、将控制文件备注修改为:备注  VARCHAR2(300) ,
会出以下错误
sqlldr userid=bocomcmis/bocomcmis control=PLS_ASSUREINFO_QH_090732.ctl errors=100000000 direct=y columnarrayrows=10000
SQL*Loader-350: Syntax error at line 23.
Expecting "," or ")", found "VARCHAR2".
备注  VARCHAR2(300) ,
二、将控制文件修改如下:备注  CHAR(300) ,可以正常导入了。

LOAD DATA
INFILE './PLS_ASSUREINFO_QH_090732.del'
Append
continueif last !='^N'
INTO TABLE PLS_ASSUREINFO_QH_090732
fields terminated by "^O" optionally enclosed by '"'
TRAILING NULLCOLS (
担保合同号,
机构号,
合同类型,
合同号,
担保人类型,
担保人客户号,
保证起始日              DATE 'YYYY-MM-DD',
保证到期日              DATE 'YYYY-MM-DD',
保证状态,
币种,
保证金额,
额度,
是否有保证金标志,
保证金编号,
保证金账号,
备注  CHAR(300) ,
时间戳          TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF',
扩展标志位,
扩展域
)

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
8 [报告]
发表于 2009-08-28 16:21 |只看该作者
4楼不是写的很清楚么,要用char(300)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP