ORA-06502: PL/SQL: 数字或值错误
作者: 葛屹肃 | 日期: 2022-06-16 | 分类: 个人杂谈
前天提及项目上线问题,经分析后,发现其中有一个是数据库执行过程出现异常而引起的,报错信息为:ORA-06502: PL/SQL: 数字或值错误。
这种错误以往有碰到过的,详细信息如下:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
有经验的朋友都知道,这个是由于变量定义的字符长度不足引起的,不过,一个过程的SQL太长的话,要定位那个变量出问题也是很麻烦的。
我的做法是,在过程新增一个OUT参数,将这个OUT参数在过程从头至尾逐段SQL赋不同值,看看在那段SQL出现异常而退出,那么,可定位到异常的SQL。
再看该段SQL所使用的变量,有那一个可能出现长度不足的,这个只要查询一下数据就可发现的。
经测试发现,原来问题出在一个系统参数,这个参数用于提示用户包装是珍珠棉还是纸板,预定义长度为200,结果用户填写超出50个客户代码,每个客户代码是5位再加上一位分隔符,已经超出200的长度,因此,每次执行这个过程都会出现异常。
发现问题后,将变量长度改为2000后,恢复正常,也咨询过用户,这个参数要加入的客户代码肯定不会超过100个的,2000的长度完成足够。
这个问题完美解决了,另外一个问题,由于偶然才会出现,目前已经增加了操作日志,以便出现问题时进行排查。
版权声明:本文由〖葛屹肃〗发布,转载请注明出处!
文章链接:https://www.geyisu.com/2634.html
文章链接:https://www.geyisu.com/2634.html