首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle PL/SQL 迴圈語法完整教學:LOOP、WHILE、FOR 三大類型

     編輯:Oracle 資料庫相關知識

前言

迴圈是程式控制流程的核心結構。Oracle PL/SQL 提供三種基本迴圈語法:基本 LOOP、WHILE LOOP、FOR LOOP。本文逐一說明語法、範例與適用情境,協助開發人員選擇最適合的寫法。

一、基本 LOOP (無條件迴圈)

語法

LOOP
    statements;
    EXIT [WHEN condition];   -- 必須有離開條件,否則無限迴圈
END LOOP;

範例:計數器 1 到 5

DECLARE
    counter NUMBER := 0;
BEGIN
    LOOP
        counter := counter + 1;
        EXIT WHEN counter = 5;   -- 當 counter 等於 5 時跳出
        DBMS_OUTPUT.PUT_LINE('Counter = ' || counter);
    END LOOP;
END;
/

特性

  • 至少執行一次迴圈主體 (Post-test 邏輯)。
  • EXIT 可出現在任意位置;EXIT WHEN 為條件式跳出。
  • 適合「先處理再判斷」或無明確迴圈次數的情境。

二、WHILE LOOP (前測試迴圈)

語法

WHILE condition LOOP
    statements;
END LOOP;

範例:同樣計數 1 到 5

DECLARE
    counter NUMBER := 0;
BEGIN
    WHILE counter < 6 LOOP
        counter := counter + 1;
        DBMS_OUTPUT.PUT_LINE('Counter = ' || counter);
    END LOOP;
END;
/

特性

  • 進入迴圈前先評估條件,條件為 FALSE 則零次執行。
  • 適用於「迴圈次數未知、依資料狀態決定」的情境 (如游標 FETCH 迴圈)。

三、FOR LOOP (計數器迴圈)

語法

FOR loop_counter IN [REVERSE] lower_bound .. upper_bound LOOP
    statements;
END LOOP;
  • loop_counter 為隱性宣告的區域整數變數,不可在迴圈內指派值。
  • REVERSE 關鍵字可反向遞減 (upper_bound 到 lower_bound)。
  • 範圍包含邊界值 (inclusive)。

範例:正向 1~5

BEGIN
    FOR cnt IN 1 .. 5 LOOP
        DBMS_OUTPUT.PUT_LINE('Count = ' || cnt);
    END LOOP;
END;
/

範例:反向 5~1

BEGIN
    FOR cnt IN REVERSE 1 .. 5 LOOP
        DBMS_OUTPUT.PUT_LINE('Reverse Count = ' || cnt);
    END LOOP;
END;
/

特性

  • 程式碼最精簡、可讀性最高,適用已知迴圈次數的情境。
  • 迴圈變數自動宣告與釋放,無需手動管理。

四、進階技巧與常見錯誤

主題說明
巢狀迴圈標籤使用 <<label>> 標籤搭配 EXIT label WHEN ... 跳出外層迴圈。
CONTINUE 陳述式 (11g+)CONTINUE WHEN condition; 可跳過本次迭代剩餘敘述,直接進入下一次迴圈。
FOR 迴圈變數不可指派編譯錯誤:PLS-00363: expression 'CNT' cannot be used as an assignment target。
隱性游標 FOR 迴圈FOR rec IN (SELECT * FROM emp) LOOP ... END LOOP; 自動 OPEN/FETCH/CLOSE,最推薦寫法。

五、效能建議

  1. 大量資料處理優先考慮 BULK COLLECT ... LIMIT + FORALL,減少 Context Switch。
  2. 簡單計數迴圈用 FOR;條件複雜或需提前跳出用 WHILE 或 LOOP。
  3. 避免在迴圈內執行 DML (INSERT/UPDATE/DELETE),改用集合批次操作。

結語

掌握三種迴圈語法與進階控制陳述式,能撰寫出結構清晰、效能優異的 PL/SQL 程式。實務上建議:已知範圍用 FOR、未知範圍用 WHILE、至少執行一次用 LOOP,並善用標籤與 CONTINUE 控制複雜流程。

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