PL/SQL–异常处理
PLSQL 中的例外一般有两种:
1 、Oracle 内部错误抛出的例外:这又分为预定义例外(有错误号+ 常量定义) 和 非预定义例外(仅有错误号,无常量定义)
2 、程序员显式的抛出的例外
基本语法
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
--处理语句。。
[WHEN exception3 [OR exception4 . . .] THEN
--处理语句。。
[WHEN OTHERS THEN --其他异常,省事
--处理语句。。
]
others 的处理: Others 中的异常一般是我们为考虑到的异常,但发生这种情况的时候,我们还是希望了解当时发生了什么?Oracle 提供了两个内置函数 SQLCODE 和 SQLERRM 分别用来返回错误号和错误描述;
exception
when no_data_found then
dbms_output.put_line('SQLCODE ->' || SQLCODE || ' SQLERRM ->' || SQLERRM);
处理非预定义的Oracle 错误:此类错误属于Oracle 错误,有编号,但无错误名称定义,使用时需要先声明,并进行错误初始化:
DECLARE
--声明异常
e_emps_remaining EXCEPTION;
--将错误编号与异常名称联系起来
PRAGMA EXCEPTION_INIT(e_emps_remaining, -2292);
Begin
在使用时不用手动抛出异常,和使用预定义异常一样;
处理用户自定义的异常
步骤:
1.声明异常
2.抛出异常
3.处理异常
declare
e_not_positive exception;--声明异常
v_value number := -1;
begin
if v_value < 0 then
raise e_not_positive;--抛出异常
end if;
exception
when e_not_positive then--处理异常
dbms_output.put_line('不是正数');
end;
RAISE_APPLICATION_ERROR() 函数:对于用户自定义的业务错误,如果觉得先定义再使用很麻烦,那么也可以简单的使用raise_application_error() 来简化处理。它可以无需预先定义错误,而在需要抛出错误的; 地方直接使用此函数抛出例外,例外可以包含用户自定义的错误吗和错误描述
--似乎就是弹出一个框而已
RAISE_APPLICATION_ERROR (-20201,'Manager is not a valid employee.');