问题现象: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】的方式去定义,可以避免以后表字段变大时出现的异常问题。