oracle如何捕获raise应用程序错误



如何为raise_application_error调用编写异常处理程序?我完全被它迷住了。我知道如何上升和捕获自定义异常,但我不知道,如何捕获错误与raise_application_error与其他捕获块然后"当其他"。谢谢你的提示

像这样?

declare
no_bananas_on_tuesday exception;
pragma exception_init(no_bananas_on_tuesday, -20123);
begin
raise_application_error(-20123, 'Bananas are not available on a Tuesday');
exception
when no_bananas_on_tuesday then
dbms_output.put_line('It''s Tuesday but user requested a banana.');
end;
  1. 上面的调用产生ORA-20123错误。
  2. 我们定义了一个自定义异常no_bananas_on_tuesday与代码-20123关联。
  3. 当ORA-20123异常发生时,我们可以用no_bananas_on_tuesday异常处理程序捕获它。

可以查看sqlcodeInside your "when others">

例如:

create or replace function square( n number) return number is
begin
if n <= 10 then
return n*n;
else
raise_application_error(-20001, 'too big');
end if;
end;

declare
myNumber number(10);
begin
myNumber := square(300);
dbms_output.put_line(myNumber);
exception
when others then  
if sqlcode=-20001 then
dbms_output.put_line('beyond the limit '||sqlerrm);
else
dbms_output.put_line(sqlerrm);
end if;
end;

相关内容

最新更新