ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

原创 Linux操作系统 作者:wisdomone1 时间:2011-12-08 17:19:46 0 删除 编辑
 在调试久悬户转营业外收入proc_batchdormaccttooutincome时,报错如题,首先认
为是存储过程的某些变量声明范围较小,比如varchar2的具体精度有些小,加大即可.
随后于网上查询,也多半是此类解决方法,摘举网上相关连接,供参考:

http://hi.baidu.com/forhh/blog/item/a6a48326357e34128a82a1f2.html



http://topic.csdn.net/u/20071020/16/e44e96fd-2f23-4392-80bd-3022a9151dd8.html

其它链接不再列举于此,大同小异

根据以上网友方法一一尝试,毕无果而终;

后采用排除法处理;大体思路如下:
 1,先把久悬户转营业外收入proc_batchdormaccttooutincome的游标提取
           数据记录限制为1条
   
     2, 开启pl/sql developer的test窗口,组合采用单步及逐过程或者单步跳出
            或者运行 到下一个异常
     3, 最终定位是因为游标的代码顺序出错异常如题报错:
             (注:请注意我用其它涂蓝色及标注顺序号的相关行代码,其实就把游标相关
      行代码顺序进行了调换即可)
   原代码:
      open   cur_getdormmedium;
      loop
       fetch cur_getdormmedium into lvnmediumid, --1
                              lvnvouhno,
                              lvnvouhtype,
                              lvnfundtypdtlcd,
                              --lvntaxrptforpersnbr,
                              lvnbranchorgnbr,
                              lvnacctnbr,
                              lvnmjaccttypcd,
                              lvncurrmiaccttypcd;
       --略去中间业务处理代码,共计是5个子级存储过程 ---2
       exit when cur_getdormmedium%notfound;    ---3
                         end loop;           
                         close cur_getdormmedium;
   修改后代码:
      open   cur_getdormmedium;
      loop
       fetch cur_getdormmedium into lvnmediumid, --1
                              lvnvouhno,
                              lvnvouhtype,
                              lvnfundtypdtlcd,
                              --lvntaxrptforpersnbr,
                              lvnbranchorgnbr,
                              lvnacctnbr,
                              lvnmjaccttypcd,
                              lvncurrmiaccttypcd;
       exit when cur_getdormmedium%notfound;   --3
                         --略去中间业务处理代码,共计是5个子级存储过程 --2
                         end loop;           
                         close cur_getdormmedium;

    小结: 
    a,游标代码块中,open 游标后先判断游标是否提取到数据集,
     如游标存在数据集,则继续运行中间业务处理代码,否则退出;
     

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-712977/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

注册时间:2008-04-04

  • 博文量
    2164
  • 访问量
    11736535