捕获异常
预定义异常:
1 no_data_found:没有找到数据
2 TOO_MANY_ROWS: 找到太多数据
3 INVALID_CURSOR: 失效的游标
4 ZERO_DIVIDE :除数为零
5 DUP_VAL_ON_INDEX :唯一索引中插入了重复值
declare
name employee.e_name%type;
begin
select e_name into name from employee where e_id=123;
exception
when no_data_found then
dbms_output.put_line('no result!');
end;
非预定义异常:
在数据库中没有定义异常名称的异常。这中异常通常都是数据库的错误,这些错误只有错误编号、而没有错误的异常名称,所以不能直接捕捉到。为了捕捉到非预定义的异常,必须先创建一个异常名称,然后将错误编号和刚刚创建的异常名称关联起来,这样就可以在异常处理部分通过定义的异常名称来捕捉这个异常了。
declare
e_emp_remaining EXCEPTION;
PRAGMA EXCEPTION_INIT(e_emp_remaining,-2293);
begin
exception
when e_emp_remaining then
...........
end;
用户自定义异常:
RAISE命令
相关函数:
1 SQLCODE
2 SQLERRM
declare
v_errorcode number;
v_msg varchar2(255);
name employee.e_name%type;
begin
select e_name into name from employee where e_id=123;
exception
when no_data_found then
v_errorcode:=sqlcode;
v_msg:=sqlerrm;
dbms_output.put_line(v_errorcode||'no result!'||v_msg);
end;