Chinaunix

标题: 将数据sqlldr到oracle发现明显字段长度足够,但无法导入,问题出在哪里? [打印本页]

作者: zhaoqinghu    时间: 2009-08-28 13:11
标题: 将数据sqlldr到oracle发现明显字段长度足够,但无法导入,问题出在哪里?
我要实现是是从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万元,建议发放该笔贷款,期限三年,分期付息一次还本,执行基准利率,请审批!
作者: Minsic    时间: 2009-08-28 14:23
控制文件是怎么写的?

ps:最后给的是bad文件中取出的记录?
作者: zhaoqinghu    时间: 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
作者: Minsic    时间: 2009-08-28 15:36
控制文件中字符类型默认的长度是255,尝试为备注字段指定长度吧:备注 char(300)
作者: zhaoqinghu    时间: 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>
作者: Minsic    时间: 2009-08-28 15:59
标题: 回复 #5 zhaoqinghu 的帖子
我的意思是:

修改控制文件里面备注字段的长度的描述。
作者: zhaoqinghu    时间: 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',
扩展标志位,
扩展域
)
作者: Minsic    时间: 2009-08-28 16:21
4楼不是写的很清楚么,要用char(300)




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2