PL/SQL支持程序员在程序中使用异常块捕获程序运行
中出现的错误等异常信息,分为:
1、系统定义的异常
2、用户定义的异常
系统级异常
–语法如下:
begin
exception
when 异常名then
语句...
when others then
语句...
end;
案例:
查询部门表中有某个编号的部门,给其一个不存在的编号来演示NO_DATA_FOUND异常:该异常在SELECT INTO语句查询不到结果时触发.
另外给其一个能够返回多个行记录的编码来演示TOO_MANY_ROWS异常:该异常在SELECT INTO语句查询后返回多个行记录时触发.
declare
dnum number:=60;
depts dept%rowtype;
dna dept.dname%type;
begin
select * into depts.deptno,dna,depts.loc from dept where deptno>dnum;
dbms_output.put_line('部门编号:'||depts.deptno||',部门名称:'||dna||',城
市:'||depts.loc);
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;
自定义异常
自定义异常需要现在declare中声明,类型为exception类型,然后需要在begin中给其设置触发条件,然后就可以在exception后的when中使用.
自定义异常三步骤:
1.declare中定义异常
2.begin中设置触发条件,由raise关键字触发.注: raise中文发音:瑞爱Z
3.exception中使用
案例:
查询指定id的员工名字来演示自定义异常
declare
cid number:=-1;
cname emp.ename%type;
ex_invalid_id exception; ---1.定义异常
begin
if cid <0 then ---2.设定触发条件
raise ex_invalid_id;
end if;
select ename into cname from emp where empno=cid;
dbms_output.put_line('员工名字为:'||cname);
exception
when ex_invalid_id then ---3.使用异常
dbms_output.put_line('id不可用,不能为负数');
when no_data_found then
dbms_output.put_line('未查到任何数据');
when others then
dbms_output.put_line('其他异常,请联系管理员');
end;

1362

被折叠的 条评论
为什么被折叠?



