PL/SQL 异常高级概念

做好了准备想要接受难一点的概念,结果发现,其实这一章很水。

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来捕捉它了。

不过这样好像也没什么大作用啊……

原文地址:https://www.cnblogs.com/kingsleylam/p/3029829.html