自定义异常:
如果想在某个特定事件发生时向应用程序的用于发出一些警告信息.而事件本身不会抛出Oracle内部异常,这个异常属于应用程序的特定异常.那么就需要自定义异常.
用于定义的异常错误是通过使用raise语句来触发.当引发一个异常错误时,控制就转向到exception块异常错误部分,执行错误处理代码.
自定义异常处理步骤:
1.在pl/sql块的声明部分定义异常情况:
<异常情况> exception
2.raise <异常情况>
3.在pl/sql块的异常处理部分对异常情况做出相应的处理.
实例:
declare
v_empno emp.empno%type := &empno;
--1.声明异常
e_no_result exception;
begin
update emp set sal = sal + 100 where empno = v_empno;
if sql%notfound then
--2.raise手工触发异常
raise e_no_result;
else
commit;
end if;
exception
--3.对异常做出处理
when e_no_result then
dbms_output.put_line('数据更新失败');
when others then
dbms_output.put_line('其他错误');
end;
当输入员工编号为 1234时,是没有这个员工的,更新操作失败.进入自定义异常处理部分.
结果为:
sql代码解读:
SQL%NOTFOUND 是一个布尔值。与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true。否则返回false。这样的语句在实际应用中,是非常有用的。例如要update一行数据时,如果没有找到,就可以作相应操作。
SQL%FOUND 的用法与sql%notfound用法相反,也是与最近的sql语句发生交互,如果影响行数大于0条,则为true
否则为false。