一、概念
异常,程序运行过程中发生异常。异常是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性
declare
--声明变量
begin
--业务逻辑
exception
--处理异常
when 异常1 then
...
when 异常2 then
...
when others then
...处理其它异常
end;
二、分类
1.系统例外(常见)
名称 | 描述 |
no_data_found | 没有找到数据 |
value_error | 算术或转换错误 |
too_many_rows | 查询出了多行记录,赋值给rowtype记录一行数据变量 |
zero_divide | 被零除 |
timeout_on_resource | 等待资源异常 |
declare
vi number;
vrow emp%rowtype;
begin
--vi := 8/0;
--vi := 'aaa';
--select * into vrow from emp;
select * into vrow from emp where empno=1234567;
exception
when zero_divide then
dbms_output.put_line('发生了除零异常');
when value_error then
dbms_output.put_line('发生了类型转换异常');
when too_many_rows then
dbms_output.put_line(' 查询出多行记录,但是赋值给了rowtype记录一行数据变量');
when no_data_found then
dbms_output.put_line('没有找到数据异常');
when others then
dbms_output.put_line('发生了其它异常' || sqlerrm);
end;
2.自定义例外
--自定义异常:
异常名 exception; --声明异常
--抛出自定义的异常
raise 异常名;
--查询指定编号的员工,如果没有找到,则抛出自定义的异常
/*
--错误的演示
1.声明一个变量 %rowtype
2.查询员工信息,保存起来
3.判断员工信息是否为空
4. 如果是 则抛出异常
*/
declare
-- 1.声明一个变量 %rowtype
vrow emp%rowtype;
--2 .声明一个自定义的异常
no_emp exception;
begin
--查询员工信息,保存起来
select * into vrow from emp where empno = 8888; --抛出异常
if vrow.sal is null then
raise no_emp; --抛出自定义的异常
end if;
exception
when no_emp then
dbms_output.put_line('输出了自定义的异常');
when others then
dbms_output.put_line('输出了其它异常'||sqlerrm);
end;