系统中没有预设名字的异常错误

语法:

exception_name EXCEPTION

PRAGMA EXCEPTION_INIT(exception_name, err_code);

以上在declare块中。

EXCEPTION WHEN condition THEN

BEGIN

statements

END:

参数:

exception_name

用户自行决定的一个错误名,最好不要跟系统原有错误名重复,如果重复,那么在这个变量的作用域内,同名系统内部错误无法用这个名字捕捉到。

err_code

一个系统内部预设的异常的错误号。

condition

错误的类型,这个异常条件是用来让存储过程的用户过滤感兴趣的异常,比如,当进行SELECT INTO操作时,如果返回的结果为0或者大于1,系统都会报告一个异常,这时,就可以使用相应的条件来过滤这些异常条件。其他未过滤的异常将会进入正常的路径,导致系统退出整个事务并跳回主循环。

statements

当发生异常时,需要执行的语句。

说明:

这里定义的exception的作用域与普通变量一样。内层可以捕获外层定义的exception,外层却无法用内层定义的异常名来捕捉该异常。系统中原本有名字的异常,也可以用这种方法,给它一个别名,然后捕捉。目前系统中各种异常的错误号还没有被整理出来,所以,绝大多数异常还是只能通过others进行捕捉。

示例:没有预设名字的异常错误语句

--  清理环境
DROP PROCEDURE proc;

CREATE OR REPLACE PROCEDURE proc as
    m exception;
    n int;
    pragma exception_init(m,848297995);
BEGIN
    n = 10/0;
    exception when m then
        dbms_output.put_line('good morning');
END;

/
exec proc;

--删除过程
DROP PROCEDURE proc;