内部定义的异常
内部定义的异常没有名称,但它有自己的代码。
什么时候用?
如果你知道数据库操作可能会引发那些没有名称的特定异常,那么你可以为它们指定名称,以便你可以专门为它们编写异常处理程序。否则,你只能将它们与 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 文档说:“具有用户声明名称的内部定义的异常仍然是内部定义的异常,而不是用户定义的异常。”