ORACLE异常处理:
在Oracle数据库中主要分为三类异常:
1,预定义的Oracle数据库错误;
2,非预定义的Oracle数据库错误;
3,用户定义的错误;
----预定义异常 --在Oracle中已经预先定义好名称的异常;
常见的有: no_data_found ; 没有找到数据
too_many_rows; 找到太多数据
invalid_cursor; 失效的游标
zero_divide; 除数为零 捕捉异常方法--直接在异常处理程序中按名称进行捕捉。通过用when 子句。
----非预定义异常--在数据库中没有定义异常名称的异常;为了捕捉到非预定义的异常,必须先创建一个异常名称,然后将错误编号和刚刚创建的异常名称关联起来,这样就可以在异常处理部分通过定义的异常名称来捕捉这个异常了。
----用户自定义异常 --当数据库的一些情况不符合用户的规定时,用户人为判断的异常。需要在声明部分定义异常的名称,然后在执行体中,通过一些逻辑判断决定是否违反了用户的规则,如果违反,则调用raise命令人为触发刚才定义的异常,并在异常处理部分捕捉到这个异常进行处理。
为了能够记录发生的错误信息,Oracle提供了两个相关函数:
1,sqlcode: 返回错误代码
2,sqlerrm:返回与错误代码关联的消息
异常是自里向外逐级传递的
案例1:如果empno的值不存在的时候取到将会是null,此时我们要进行捕获
declare
v_ename varchar2(5);
v_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
dbms_output.put_line('雇员名:'||v_ename||'工资'||v_sal);
--异常处理
exception
when no_data_found then
dbms_output.put_line('朋友,你输入的编号有误!');
end;
/
Exception
When others then --异常祖宗
Rollback;
Exception
when others then
dbms_output.put_line("全项目-复制认购计划数据异常!");
roolback;
excetpion
when no_data_found then
v_JIAOLOUJIHUANID:=null;