预定义错误
declare
v_emp emp%rowtype;
begin
select empno, ename into v_emp.empno, v_emp.ename
from emp where empno = '1111'; --信息是不存在的
dbms_output.put_line(v_emp.empno || '和' || v_emp.ename);
end;
- 使用goto跳转
declare
v_emp emp%rowtype;
begin
goto many;
select empno, ename into v_emp.empno, v_emp.ename
from emp where empno = '1111'; --信息是不存在的
dbms_output.put_line(v_emp.empno || '和' || v_emp.ename);
<<many>>
select empno, ename into v_emp.empno, v_emp.ename from emp; --信息数据返回多行
dbms_output.put_line(v_emp.empno || '和' || v_emp.ename);*\
--异常处理
exception
--no_data_found :无数据发现,固定写法
when no_data_found then
dbms_output.put_line('员工信息不存在!'); --执行语句,可以打印,也可以增(插入一条员工信息)删改查数据
--too_many_rows :返回数据过多
when too_many_rows then
dbms_output.put_line('返回数据过多!');
end;
非预定义错误
–预定义和非预定义指的是,动作类型系统是否已经定义好,比如
–no_data_found :无数据发现,系统预定义好的写法,–too_many_rows :返回数据过多
declare
--定义异常
v_deptno_error exception;
--错误跟定义好的错误变量想关联
pragma exception_init(v_deptno_error, -00001); --当报-00001错误码的时候,定义错误为“v_deptno_error”
begin
update emp set empno = 88 where deptno = 30;
/*exception
--错误处理*/
exception
when v_deptno_error then --当出现‘v_deptno_error’错误时,报“没有该部门编号!”
dbms_output.put_line('没有该部门编号!');
end;
select * from emp
自定义错误
即出现某种情况,我就可以定义其为异常
declare
v_sal emp.sal%type;
v_sal_error exception;
/* 注:
自定义可以不用加入关联,不用管这句
pragma exception_init(v_sal_error,-06550);*/
begin
select sal into v_sal from emp where empno = 7900;
if (v_sal < 3000) then
--1、抛出异常
/* raise v_sal_error;*/
--2、定义抛出异常编码值
raise_application_error(-20000, '薪资问题');
end if;
/*exception
when v_sal_error then
dbms_output.put_line('薪资少于3000');
when others then
dbms_output.put_line('系统异常');*/
end;