Oracle 学习笔记第九天
异常
概念:在运行程序时出现的错误叫做异常
发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分。
分类:
1. 预定义异常
-- 语法:
BEGIN
sequence_of_statements;
EXCEPTION
WHEN <exception_name> THEN
sequence_of_statements;
WHEN OTHERS THEN
sequence_of_statements;
END;
-- 举例:
BEGIN
update teacher t set t.comm=100/0;
EXCEPTION
WHEN ZERO_DIVIDE THEN dbms_output.put_line('除数为0');
WHEN OTHERS THEN dbms_output.put_line('其他异常');
END;
-
用户定义异常
有些情况可能是正常运行,但是在需求上需要我们将其设为异常,这时候就需要用到自定义异常了。
比如说有些时候我们查询的值符合规范,但是在数据库中没有值,这时候返回给我们的为空(不为null,为‘ ’),但是这时候却不想显示空,可以写一个自定义异常,显示一些我们想要输出的提示内容。
首先我们需要在声明部分定义异常,然后在异常块里面抛出异常,然后在处理异常。
-- 语法 -- 声明异常 DACLARE e_exceptionName EXCEPTION; -- 抛出异常 BEGIN RAISE e_exceptionName ; -- 处理异常 -- 这部分写你想要怎么处理的逻辑。
绑定异常编号
我们通过PLSQL运行后爆出的异常一般可以看到异常编码,但是我们不知道用什么名称将有些特殊的系统异常放在异常处理中,这个时候我们可以定义异常,然后绑定异常编号,通过这样来达到处理这些异常的目的,比如:
前面的ORA-xxxxx就是异常编码,定义异常变量,然后绑定这个异常编码,再在异常处理中处理。
-- 语法:
declare
--定义异常变量
v_exception exception;
--将异常变量绑定到某个特殊的错误码
pragma exception_init(v_exception,-2291);
-- 举例:
set serveroutput on;
declare
v_empno emp.empno%type := &工号;
--定义异常变量
v_exception exception;
--将异常变量绑定到某个特殊的错误码
pragma exception_init(v_exception,-2291);
begin
update emp e
set e.deptno = 99
where e.empno = v_empno;
exception
when v_exception then
dbms_output.put_line('新的部门编号在部门表中不存在');
end;
/
抛出异常
和java一样,异常我们可以处理,也可以抛出,同样,抛出的异常有上一级调用者处理。
-- 语法
-- 在begin中判断后
raise_application_error(自己定义的异常编号,自己定义的输出的异常信息);
set serveroutput on;
declare
v_deptno emp.deptno%type := &部门编号;
v_sum number(10,2);
begin
select sum(e.sal) into v_sum
from emp e
where e.deptno = v_deptno;
--如果总工资为空则抛异常
if v_sum is null then
--抛出异常
raise_application_error(-20001,'你输入的部门没有员工');
end if;
dbms_output.put_line('该部门的总工资为:'||v_sum);
end;
/
Oracle自定义的错误码是有取值范围的,貌似小于20000的值不能选,这个是Oracle系统用的,具体还是得看官方文档,暂时还没搞清是多少。