在调试久悬户转营业外收入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 游标后先判断游标是否提取到数据集,
如游标存在数据集,则继续运行中间业务处理代码,否则退出;