我用一个过程通过databaselink 从远程oracle9i数据库用for loop ...end loop隐式游标处理longrow类型数据,insert到本地oracle10g的一个表里的blob字段中,处理到20多万条记录时报了ora-01406的错误,但是把此条记录跳过后还能再转一部分数据,然后又报错了!后来,等下班后9i上的系统业务办理停止了,又跑了一遍过程,结果转到70多万又出错了,又跳着转,但是这样太费劲了,要跳好多次,几十万的数据这样处理肯定不行,于是我狠心一个月一个月的跳着转(这样有点很不负责任,但是每办法了,施工现场没办法上网求助!),最后竟然从06年4月到12月的数据里有些转不进去,从07年至今的数据还好只有一条转不进去,跳过了他!---------------
系统信息:
ORA-01406: 读取的列值被截断
在执行S_DBA01_GCYC过程时,执行到JH=STT763RQ=12-3月 -05时:
原因:
在宿主语言程序中,FETCH(取值)操作被迫截断一字符串。程序缓冲区对此列来说不够大,不能放下全部的字符串。游标(cursor)返回的值为+3
措施:
增大列缓冲区以放下最大的列值。或者进行适当的处理
----------------------------------
看了oracle 提供的上述错误信息,没什么帮助!还有公司同事说也遇到类似问题,猜测是不是oracle9i到10g的问题,但是我在现场试过了,把存储过程和database link 迁移到9i的数据库上,还是不行!现在我想求助高手来帮忙了!