如何获得存储过程异常出错时的存储过程行号?
rt 问题点数:20、回复次数:11Top
1 楼pgh(crocodile)回复于 2005-04-18 16:59:12 得分 0
kkTop
2 楼leborety(那只螃蟹)回复于 2005-04-19 17:13:06 得分 8
你应该就想知道那里错了吧
1。写的时候调试可以看到哪错了
2。每过一段代码,写赋值行号给一个变量,出错的时候,打印这个变量。
Top
3 楼Alkeen()回复于 2005-04-19 17:39:03 得分 0
程序编译错误的话,像SQL*Plus等工具都会提示哪一行出错的。
业务逻辑出错的话,就靠你自己写异常处理了。Top
4 楼pgh(crocodile)回复于 2005-04-20 09:49:50 得分 0
调试要知道哪行错是很容易的, 但是在部署存储过程的时候, 这个时候很大的存储过程出错了,如果你能立刻知道是哪行就很方便差错了.Top
5 楼leborety(那只螃蟹)回复于 2005-04-20 10:22:55 得分 0
我上说的第二个应该可以满足你的要求Top
6 楼pgh(crocodile)回复于 2005-04-20 12:57:04 得分 0
hehe, 多谢你啊,我现在也是在关键地方插入变量标识, 出错就写入出错日志里, 但是觉得很麻烦, 再看看,如果没有更好的办法,我就结贴咯Top
7 楼baojianjun(包子)回复于 2005-04-20 13:33:18 得分 0
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20007,ERR_||SQLERRM(SQLCODE));
end ;
/
--使用sqlcode來返回就可以了Top
8 楼pgh(crocodile)回复于 2005-04-20 18:41:30 得分 0
to baojianjun(包子):
使用sqlcode只能返回错误号,不能得到出错所在的代码行号吧Top
9 楼psp2003()回复于 2005-04-20 18:53:12 得分 0
顶一马Top
10 楼baojianjun(包子)回复于 2005-04-20 20:09:19 得分 12
使用sqlcode只能返回错误号,不能得到出错所在的代码行号吧
使用err_来返回代码错误的位置
--example:
create or replace procedure pro_test
as
err_ varchar2(200);
is_name varchar2(30);
begin
err_ := 'error in select name ..';
select name into is_name
from emp_main
where name = 'baojianjun'
and rownum =1 ;
err_ := 'error in delete from ..';
delete from emp_main
where name = 'baojianjun';
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-20007,ERR_||SQLERRM(SQLCODE));
end ;
/Top
11 楼pgh(crocodile)回复于 2005-04-21 08:48:50 得分 0
to baojianjun(包子):
你说的这个方法,我稍觉得麻烦,而且使得代码更加不清晰.不过看起来这是比较好的方法了Top




