條件分支是程式控制流程的基石。Oracle PL/SQL 提供三種 IF 結構:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF,本文詳述語法規則與實務範例。
IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;
條件成立執行區塊,否則直接跳過。
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM cip_temps;
IF (v_count > 0) THEN
DBMS_OUTPUT.PUT_LINE('v_count 的值: ' || v_count);
END IF;
END;
/
條件成立執行 THEN 區塊,否則執行 ELSE 區塊。
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM cip_temps;
IF (v_count > 11) THEN
DBMS_OUTPUT.PUT_LINE('v_count 的值: ' || v_count);
ELSE
DBMS_OUTPUT.PUT_LINE('v_count 的值: ' || v_count);
END IF;
END;
/
依序評估多個條件,首個符合者執行對應區塊,全不符合執行 ELSE。
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM cip_temps;
IF (v_count > 10) THEN
DBMS_OUTPUT.PUT_LINE('IF 區塊 - v_count: ' || v_count);
ELSIF (v_count = 10) THEN
DBMS_OUTPUT.PUT_LINE('ELSIF 區塊 - v_count: ' || v_count);
ELSE
DBMS_OUTPUT.PUT_LINE('ELSE 區塊 - v_count: ' || v_count);
END IF;
END;
/
IF 必須以 END IF; 結束(分號不可省略)ELSIF 拼寫無 E(非 ELSEIF)NULL 參與比較結果為 UNKNOWN,視同 FALSECASE 表達式DBMS_UTILITY.GET_TIME 或 DBMS_PROFILER 分析分支效能| 錯誤現象 | 原因 | 修正 |
|---|---|---|
| PLS-00103: Encountered symbol "END" | 漏寫 END IF 分號 | 補上 END IF; |
| 條件永不成立 | 比較值含 NULL | 使用 NVL/COALESCE 處理 |
| ELSIF 不生效 | 拼寫為 ELSEIF | 修正為 ELSIF |