PL/SQL异常
在运行程序时出现的错误叫做异常
发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分
异常有两种类型:
预定义异常 – 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发
用户定义异常 – 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发
常用的异常:
access_into_null 在未初化对象时出现
case_not_found 在CASE语句中的选项与用户输入的数据不匹配时出现
collection_is_null 在给尚未初始化的表或数组赋值时出现
cursor_already_open 在用户试图打开已经打开的游标时出现
dup_val_on_index 在用户试图将重复的值存在使用唯一索引的数据库列中时出现
invalid_cursor 在执行非法游标运算(如打开一个尚未打开的游标)时出现
invalid_number 在将字符串转换为数字时出现
login_denied 在输入的用户名或密码无效时出现
no_data_found 在表中不存在的请求的行时出现,此外,当程序引用已经删除的元素时
storage_error 在内存损坏或PL/SQL耗尽内存时出现
too_many_rows 在执行SELECT INTO语句后返回多行时出现
value_error 在产生大小限制错误时出现
zero_divide 以零作除数时出现
Others针对所有异常
例题:
--根据输入的员工姓名查询员工的薪资 NO_DATA_FOUND declare v_sal emp.sal%type; begin select sal into v_sal from emp where ename='&pname'; dbms_output.put_line(v_sal); exception when NO_DATA_FOUND then dbms_output.put_line('不存在你输入的员工'); when others then dbms_output.put_line('test....'); end;
--自定义异常 declare v_empno emp.empno%type := &eno; no_result exception; begin update emp set sal=sal+100 where empno=v_empno; if SQL%NOTFOUND then raise no_result; end if; exception when no_result then dbms_output.put_line('你的数据更新语句失败'); when others then dbms_output.put_line('test....'); end;