异常处理的概念和分类
declare
v_name emp.ename%Type;
v_sal emp.sal%Type;
begin
select ename,sal into v_name,v_sal
from emp where empno=&no;
if v_sal<3000 then
DBMS_OUTPUT.put_line(v_name||'工资是:'||v_sal)
end if;
Exception
when no_data_found then
DBMS_OUTPUT.put_line('不存在该员工');
when others then
end
什么是异常处理?
异常处理是为了提高程序的健壮性,使用异常处理部分可以有效的解决正常执行过程中可能出现的各种错误,使程序正常运行。
exception
when 异常名称 then
执行代码
when others then
执行代码
预定义异常
非预定义异常
自定义异常
示例:
根据输入的工资查询员工的姓名,并输出员工的姓名及工资。
分析:
1:输入工资,需要代替变量&salary
2:根据工资查询员工的姓名,并将查询到的姓名赋值给姓名变量,数据库赋值需要用到select …into
3:考虑到一些特殊的情况,如果没有该工资的员工,该工资对应很多员工
declare
v_name emp.ename%TYPE;
v_sal emp.sal%type:=&salary;
begin
select ename into v_name from emp where sal=v_sal;
DBMS_OUTPUT.put_line(v_name || v_sal);
Exception
when no_data_found then
DBMS_OUTPUT.put_line('没有该工资的员工!');
when too_many_rows then
DBMS_OUTPUT.put_line('多个员工具有该工资!');
when others then
DBMS_OUTPUT.put_line('其他异常');
end;
非预定义异常的处理包括3步:
1:在PL/SQL块中定义部分定义异常情况
<异常情况> exception
2:将其定义好的异常情况与标准的ORACLE错误联系起来,使用
PRAGMA EXCEPTION_INIT语句
Pragma exception_init(异常情况,错误代码)
3:在PL/SQL块的异常情况处理部分对异常情况做出相应的处理。
示例:
删除部门表中指定的部门信息
1:dept和emp表之间具有主外键关系,当删除指定部门的信息时,应确保该部门没有该员工
declare
e_fk Exception; 第一步
pragma exception_init(e_fk,-2292); 第二步
begin
delete from dept where deptno=&deptno;
Exception
when e_fk then 第三步
DBMS_OUTPUT.put_line('此部门下有员工,不能删除');
end;