做好了准备想要接受难一点的概念,结果发现,其实这一章很水。
1. raise_application_error
raise_application_error 是Oracle提供的一种特殊的内置过程,允许程序员为特定应用程序创建有意义的错误消息,也即自定义。语法如下:
raise_application_error(error_number,error_message);
or
raise_application_error(error_number,error_message,keep_errors);
error_number是与特定错误消息相关联的错误编号,这个编号的范围在-20999到-20000之间(避免与内置编号冲突)。
keep_errors是boolean类型,决定是否加入错误栈(true)或者替换错误栈(false)。默认是false。
示例如下:
1 declare 2 a number; 3 begin 4 a := -1; 5 if a < 0 then 6 raise_application_error(-20000, 'its negative'); 7 else 8 dbms_output.put_line('its NOT negative'); 9 end if; 10 end;
注意在最后已经不用去捕获了,因为已经在第6行的时候捕捉到了异常。在PL/SQL中会弹出报错的对话框。
报错信息由用户自定义。
2.exception_init 编译指令
在有些情况下,程序需要处理具有特殊编号的Oracle错误,而不是根据名称来引用它。或者说,用户希望自定义错误的名称。这时,可以使用名为编译指令的结构。
使用exception_init编译指令,可以把某个Oracle错误编号与用户的自定义名称建立关联。
语法如下:
declare
exception_name exception;
pragma exception_init(exception_name, error_code);
先看看不用编译指令的情况下的捕捉异常:
1 declare 2 a number; 3 begin 4 a := 'a'; 5 dbms_output.put_line('can u see me?'); 6 exception 7 when value_error then dbms_output.put_line('exception here'); 8 end;
value_error是内置的错误名称,这样做也没有什么问题。如果用编译指令的话,如下:
1 declare 2 a number; 3 ex exception; 4 pragma exception_init(ex, -6502); 5 begin 6 a := 'a'; 7 dbms_output.put_line('can u see me?'); 8 exception 9 when ex then dbms_output.put_line('exception here'); 10 end;
编译了一个异常,-6502是错误编号,而value_error是内置与之关联的错误名称。如此一来,就可以将value_error改为ex了,也可以在异常处理中使用ex来捕捉它了。
不过这样好像也没什么大作用啊……