不声明异常,使用使用raise_application_error抛出只有错误数字(-20999,-20000)和错误信息的异常,不能通过名称捕获,可以通过错误的数字得到自定义的异常信息。
declare
v_bool boolean := true;
begin
if v_bool then
raise_application_error(-20000, 'abc');
else
raise_application_error(-20001, 'def');
end if;
exception
when others then
if sqlcode = -20000 then
dbms_output.put_line('is:abc');
elsif sqlcode = -20000 then
dbms_output.put_line('is:def');
else
dbms_output.put_line(sqlerrm);
end if;
end;
声明一个异常,没有该异常的描述,可以通过名称捕获
declare
e_a exception;
begin
raise e_a;
exception
when e_a then
dbms_output.put_line(sqlerrm);
when others then
dbms_output.put_line(sqlerrm);
end;
exception_init可以将定义的异常名称和一个指定的错误数字关联到一起,通过名称捕获该异常
declare
e_a exception;
pragma exception_init(e_a,-20000);
begin
raise_application_error(-20000,'abc');
exception
when e_a then
dbms_output.put_line('is:abc');
when others then
dbms_output.put_line(sqlerrm);
end;
sqlcode是异常的代码,sqlerrm是异常的信息,dbms_utility.format_error_backtrace返回抛出异常的行。
declare
e_a exception;
begin
raise e_a;
exception
when e_a then
dbms_output.put_line(sqlcode);
dbms_output.put_line(sqlerrm);
dbms_output.put_line(dbms_utility.format_error_backtrace);
end;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30363279/viewspace-2126209/,如需转载,请注明出处,否则将追究法律责任。