pl-sql程序设计————oracl异常

(一)系统异常

-- 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;

在这里插入图片描述

发布了20 篇原创文章 · 获赞 3 · 访问量 631

猜你喜欢

转载自blog.csdn.net/zmjheart/article/details/105683267
今日推荐