Oracle: ORA-06512:字符串缓冲区太小

问题现象:ORA-06512:字符串缓冲区太小

报错截图

解决思路:

出现以上报错后点击"是",plsql会直接定位到以下的程序报错位置;

plsql提示的报错位置

由于是查询语句,我现在需要查出在查哪条数据时发生的这个报错,便于进行debug,

一、

在报错行之前使用

dbms_output.put_line("v_accoid: " || v_accoid);

在Output窗口中输出v_accoid,

二、

编译后再次运行报错,应该是dbms_output包的缓冲区太小。用自己写的sp_putline()(该函数在我以前的博文有分享出来)替换之。

三、

成功查出出错数据

出错数据

四、

Test 该函数之后发现:v_agencyno 变量被定义成了varchar2(10),而该变量的返回结果就达到了12个字节。

修改v_agencyno的长度为 tageinfo.c_agencyno%type;

问题完美解决。

所以在存储过程或函数里定义变量时最好使用【表名.字段名%type】的方式去定义,可以避免以后表字段变大时出现的异常问题。

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值