内部定义的异常

内部定义的异常没有名称,但它有自己的代码。

什么时候用?

如果你知道数据库操作可能会引发那些没有名称的特定异常,那么你可以为它们指定名称,以便你可以专门为它们编写异常处理程序。否则,你只能将它们与 others 异常处理程序一起使用。

句法

declare 
    my_name_exc exception;
    pragma exception_init(my_name_exc,-37);
begin
    ...
exception 
    when my_name_exc then
        do something
end;

my_name_exc exception; 即异常名称声明。

pragma exception_init(my_name_exc,-37); 将名称分配给内部定义的异常的错误代码。

我们有一个 emp_id,它是 emp 表中的主键和 dept 表中的外键。如果我们尝试在有子记录时删除 emp_id,则会使用代码 -2292 抛出异常。

create or replace procedure remove_employee
is
    emp_exception exception;
    pragma exception_init(emp_exception,-2292);
begin
    delete from emp where emp_id = 3;
exception
    when emp_exception then
        dbms_output.put_line('You can not do that!');
end;
/

Oracle 文档说:“具有用户声明名称的内部定义的异常仍然是内部定义的异常,而不是用户定义的异常。”