如何为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;
- 上面的调用产生ORA-20123错误。
- 我们定义了一个自定义异常
no_bananas_on_tuesday
与代码-20123关联。 当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;