给你个小例子,要在select .... into ...后加异常错误判断,主要是结果集不为一就会报错。 create or replace procedure FunTest(in_str char) as v_str varchar2(100) := ' '; begin begin select id into V_str from zoutest where type = in_str; exception when others then if (sql%notfound) then v_str := 'error 0'; end if; end; dbms_output.put_line(v_str); --如果还要继续 --begin --...................... --end;end; / execute FunTest('1');
如下: EBGIN SELECT A INTO B FROM TAB1 WHERE 。 EXCEPTION WHEN NO_DATA_FOUND THEN MESSAGE('没有数据'); --错误处理 WHEN TOO_MANY_ROWS THEN MESSAGE('返回多行记录'); --错误处理 WHEN OTHERS THEN MESSAGE('其他异常') --错误处理 END ;EBGIN SELECT A1 INTO B1 FROM TAB2 WHERE 。 EXCEPTION WHEN NO_DATA_FOUND THEN MESSAGE('没有数据'); --错误处理 WHEN TOO_MANY_ROWS THEN MESSAGE('返回多行记录'); --错误处理 WHEN OTHERS THEN MESSAGE('其他异常') --错误处理 END ;你如果在调试时,最好把EXCEPTION语句(异常处理屏蔽),如果设置了SYSTEM_MESSAGE语句,最好先注释掉。当出现错误时,应该出现ORA-XXXXX等错误提示。 如果你有D2K,最好把代码放到里面调试,效果不错!
“用到SELECT INTO 语句的地方,由于可能返回多记录或无记录,导致错误。所以最好针对每条SELECT 语句有一个错误拦截。”
请问如何拦截?ORACLE报错代码是
as_retval -> 本次操作是否成功。
0 ->成功
1 ->已增礼
2 ->不符合赠礼条件
10 -> 参数错误请稍后再试
11 -> 资料库存取错误请稍后再试
12 -> 执行错误请稍后再试总是报11 -> 资料库存取错误请稍后再试请各位高手一定帮我!再次鞠躬致谢了!
比如上面我的第一个存储过程,我这样调试时报错:declare
retval int;
retstr varchar2(20);
begin
CPC.SP_ACTIVITY('0001','8030000000009831',retval,retstr);
end;改成这样也报错!declare
retval int;
retstr varchar2(20);
begin
Execute procedure CPC.SP_ACTIVITY('0001','8030000000009831',retval,retstr);
end;
怎么办啊?My God!天啊!谁有调试Stored Procedure的好经验好方法技巧传授一下,好吗?
create or replace procedure FunTest(in_str char)
as
v_str varchar2(100) := ' ';
begin
begin
select id into V_str from zoutest where type = in_str;
exception
when others then
if (sql%notfound) then
v_str := 'error 0';
end if; end;
dbms_output.put_line(v_str);
--如果还要继续
--begin
--......................
--end;end;
/
execute FunTest('1');
EBGIN
SELECT A INTO B FROM TAB1 WHERE 。
EXCEPTION
WHEN NO_DATA_FOUND THEN
MESSAGE('没有数据');
--错误处理
WHEN TOO_MANY_ROWS THEN
MESSAGE('返回多行记录');
--错误处理
WHEN OTHERS THEN
MESSAGE('其他异常')
--错误处理
END ;EBGIN
SELECT A1 INTO B1 FROM TAB2 WHERE 。
EXCEPTION
WHEN NO_DATA_FOUND THEN
MESSAGE('没有数据');
--错误处理
WHEN TOO_MANY_ROWS THEN
MESSAGE('返回多行记录');
--错误处理
WHEN OTHERS THEN
MESSAGE('其他异常')
--错误处理
END ;你如果在调试时,最好把EXCEPTION语句(异常处理屏蔽),如果设置了SYSTEM_MESSAGE语句,最好先注释掉。当出现错误时,应该出现ORA-XXXXX等错误提示。
如果你有D2K,最好把代码放到里面调试,效果不错!
:)