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

PL/SQL 條件判斷語句完全指南:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF

     編輯:MySQL 綜合教學

PL/SQL 條件判斷語句完全指南:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF

PL/SQL 程式設計中,條件控制是核心邏輯構建塊。Oracle PL/SQL 提供三層級的 IF 結構,涵蓋從單一分支到多重分支的所有場景。

語法速查表

結構適用場景關鍵字
IF-THEN單一條件,滿足才執行,否則跳過IF / THEN / END IF
IF-THEN-ELSE二元選擇,滿足執行 A,否則執行 BIF / THEN / ELSE / END IF
IF-THEN-ELSIF多條件互斥,依序判斷,匹配即停止IF / THEN / ELSIF / ELSE / END IF

1. IF-THEN:最簡單的守衛子句

IF v_salary > 50000 THEN
  v_bonus := v_salary * 0.1;
END IF;

• 條件為 TRUE 才進入 THEN 區塊。
• 無 ELSE,條件為 FALSE 或 NULL 直接跳過。
• 每個 IF 必須以 END IF 結束,別漏寫分號。

2. IF-THEN-ELSE:非黑即白的雙路徑

IF v_dept_id = 10 THEN
  v_dept_name := 'ACCOUNTING';
ELSE
  v_dept_name := 'OTHER';
END IF;

• 確保一定有一條路徑被執行。
• 適合「布林決策」:是/否、存在/不存在、通過/拒絕。

3. IF-THEN-ELSIF:多條件級聯判斷

IF v_grade = 'A' THEN
  v_bonus_pct := 0.20;
ELSIF v_grade = 'B' THEN
  v_bonus_pct := 0.15;
ELSIF v_grade = 'C' THEN
  v_bonus_pct := 0.10;
ELSE
  v_bonus_pct := 0;
END IF;

• 自上而下順序評估,首個 TRUE 執行對應區塊後直接跳出,不再檢查後續 ELSIF。
• 最後的 ELSE 為「養老條款」,捕獲所有未匹配情況(含 NULL)。
• 切記關鍵字是 ELSIF(無 E),而非 ELSEIF。

實戰最佳實踐

  1. 條件順序優化:將「最常命中」或「計算最輕量」的條件前置,減少平均判斷次數。
  2. 避免深層嵌套:超過 3 層 IF 建議重構為 CASE 表達式或拆分子程序。
  3. 處理 NULL 陷阱:NULL = NULL 為 NULL (非 TRUE),建議顯式 IF v_var IS NULL THEN ... 或用 NVL/COALESCE 預處理。
  4. 搭配 CASE WHEN:單純賦值場景 v_result := CASE WHEN cond1 THEN val1 WHEN cond2 THEN val2 ELSE val3 END; 更簡潔且可嵌入 SQL。

常見錯誤與修正

錯誤代碼原因修正
PLS-00103漏寫 THEN 或 END IF補全關鍵字,每行結構對齊檢查
PLS-00382在 IF 中引用未聲明變數先在 DECLARE 區聲明
邏輯不符用 ELSEIF 而非 ELSIF改為 ELSIF

掌握這三種 IF 結構,配合 CASE、LOOP、EXCEPTION,即可構建健壯的 PL/SQL 業務邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved