(一)系统异常
-- Created on 2020/4/22 by ADMINISTRATOR
declare
-- Local variables here
c_manager constant number:=0.2;
c_saleman constant number:=0.15;
c_clerk constant number:=0.1;
v_job varchar(100);
v_empno number;
--empno1 number;
begin
-- Test statements here
v_empno := &empno1;
select job into v_job from scott.emp where empno=v_empno;
if v_job='CLERK' then
update scott.emp set sal=sal*(1+c_clerk) where empno=v_empno;
elsif v_job='SALSMAN' THEN
update scott.emp set sal=sal*(1+c_saleman) where empno=v_empno;
elsif v_job='MANAGER' THEN
update scott.emp set sal=sal*(1+c_manager) where empno=v_empno;
end if;
--输出加薪后的信息
--dbms_output.put_line(&empno);
exception
when NO_DATA_FOUND then
dbms_output.put_line('没有找到员工数据');
end;
(二)自定义异常
1.使用 raise 调用异常处理
-- Created on 2020/4/22 by ADMINISTRATOR
declare
-- Local variables here
e_overnumber EXCEPTION;
v_number number(9);
v_max_number number(9):=500;
begin
-- Test statements here
select max(empno) into v_number from emp;
if v_number > v_max_number then
raise e_overnumber;
end if;
exception
when e_overnumber then
dbms_output.put_line('当前eno编号是:'||v_number||', MAX allowed is:'||v_max_number);
end;
2.RAISE_APPLICATION_ERROR:将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的 SQLPLUS 或者其他前台开发语言)
RAISE_APPLICATION_ERROR ( error_number NUMBER, error_msg VARCHAR2);
error_number 值取-20000 到 -20999
-- Created on 2020/4/22 by ADMINISTRATOR
declare
-- Local variables here
can_not_delete_me exception;
key_id number:=1;
key_name varchar2(20);
begin
-- Test statements here
select name into key_name
from tuster.test where id = key_id;
if(key_name = '张三丰') then
raise_application_error(-20008,'不能删除用户!'||key_name);
end if;
delete from tuster.test where id = key_id;
end;