1. 程式人生 > >數據庫中的異常(預定義,非預定義,用戶自定義)

數據庫中的異常(預定義,非預定義,用戶自定義)

out where output 數據 sel || 非預定義異常 code err

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

數據庫中的異常(預定義,非預定義,用戶自定義)