数据库中的异常(预定义,非预定义,用户自定义)

DECLARE   --预定义 异常信息 不声明异常
   v_empno emp.empno%TYPE :=&empno;
   
   v_sal    emp.sal%TYPE;
BEGIN
   SELECT sal INTO v_sal FROM emp WHERE empno=v_empno;
   IF v_sal<=1500 THEN 
        UPDATE emp SET sal=sal+100 WHERE empno=v_empno; 
        DBMS_OUTPUT.PUT_LINE('编码为'||v_empno||'员工工资已更新!');     
   ELSE
        DBMS_OUTPUT.PUT_LINE('编码为'||v_empno||'员工工资已经超过规定值!');
   END IF; 
 
END; 

------------------------------------------------------------------------------------------------------
--用户自定义异常
   DECLARE
   v_empno emp.empno%TYPE :=&empno;     
 --声明变量V_empno,类型 emp.empno%TYPE 类型与emp表empno列类型一致
   no_result  EXCEPTION;
   --声明一个异常 名为 no_result 
BEGIN
   UPDATE emp SET sal=sal+100 WHERE empno=v_empno;
   IF SQL%NOTFOUND THEN
      RAISE no_result;--触发异常                      -- raise触发
   END IF;
EXCEPTION
   WHEN no_result THEN --当异常被触发
      DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');
      
   WHEN OTHERS THEN                                   --可以理解为异常包,接收 定义异常之外的 异常  
     DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END; 
-------------------------------------------------------------------------------------------------------
--非预定义异常
  
  -- 在PL/SQL 块的声明部分定义异常情况:
    --<异常情况>  EXCEPTION; 
  --将其定义好的异常情况,与标准的ORACLE错误联系起来,使用EXCEPTION_INIT语句 
  --PRAGMA EXCEPTION_INIT(<异常情况>, <错误代码>); 
  --在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理

DECLARE
   v_deptno dept.deptno%TYPE :=&deptno;
   deptno_remaining EXCEPTION;--声明异常
   ---
   PRAGMA EXCEPTION_INIT( deptno_remaining,     -2292);/* -2292 是违反一致性约束的错误代码 */
                          --异常情况         --oracle错误代码
                          
  /* 如果oracle语句执行中出现-2292错误,则触发deptno_remaining异常*/ 
   ---                      
BEGIN
   DELETE FROM dept WHERE deptno=v_deptno;   
EXCEPTION
   WHEN deptno_remaining THEN 
      DBMS_OUTPUT.PUT_LINE('违反数据完整性约束!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END; 
-------------------------------------------------------------------------------------------------------

 

转载于:https://www.cnblogs.com/-strong/p/7233409.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值