首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 9i PL/SQL 例外處理實戰:系統預定義與自訂例外的完整範例指南

     編輯:Oracle 資料庫基礎

Oracle 9i 例外處理兩大類別

  • 系統預定義例外: 編譯/執行期自動觸發 (如 ORA-06502 數值錯誤)。
  • 自訂例外: 開發者依業務規則定義、觸發與處理。

系統預定義例外示範

正確程式碼順利執行;錯誤代碼 (如變數溢位) 觸發預定義例外,SQL*Plus Worksheet 顯示對應錯誤畫面與提示訊息。

自訂例外完整流程

1. 定義例外

DECLARE
  exception_name EXCEPTION;

2. 觸發例外

RAISE exception_name;

3. 處理例外

EXCEPTION
  WHEN exception_name1 THEN handling_code1;
  WHEN exception_name2 THEN handling_code2;
  WHEN OTHERS THEN default_code;

實戰範例:員工薪資合理性檢核

情境: 查詢 SCOTT.EMP 中 EMPNO=7566 員工薪資,若不在 900~2600 區間則觸發 SALARY_ERROR 例外並提示。

完整 PL/SQL 區塊

DECLARE
  v_salary   NUMBER;
  salary_err EXCEPTION;
BEGIN
  SELECT sal INTO v_salary FROM scott.emp WHERE empno = 7566;
  
  IF v_salary NOT BETWEEN 900 AND 2600 THEN
    RAISE salary_err;
  END IF;
  
  DBMS_OUTPUT.PUT_LINE('薪資正常: ' || v_salary);
  
EXCEPTION
  WHEN salary_err THEN
    DBMS_OUTPUT.PUT_LINE('異常: 員工 7566 薪資 ' || v_salary || ' 超出合理區間 [900, 2600]');
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('異常: 找不到員工 7566');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('其他異常: ' || SQLERRM);
END;

關鍵圖解說明

  • 圖 9.56:錯誤代碼執行結果畫面
  • 圖 9.57:自訂例外觸發與處理輸出畫面
  • 圖 9.58:SQL*Plus Worksheet 介面操作示意

最佳實踐建議

  1. 盡量使用具體例外名稱,避免過度依賴 WHEN OTHERS。
  2. 業務邏輯錯誤 (如薪資異常、庫存不足) 應定義自訂例外,而非濫用預定義例外。
  3. 例外處理區塊保持精簡,複雜邏輯封裝為獨立程序。
  4. 搭配 RAISE_APPLICATION_ERROR 回傳標準化錯誤碼給呼叫端應用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved