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

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

 

posted @ 2017-07-25 12:28  冰逸101  阅读(787)  评论(0编辑  收藏  举报