在 DB2 SQL PL(預存程序/觸發器/匿名區塊)中,迴圈結構是流程控制的核心。本文系統整理四種迴圈語法:WHILE、LOOP、REPEAT、FOR,附上標準語法、流程圖解說與實務範例,助您精準選擇最適合的迴圈型態。
適用於「迴圈次數未知、依條件決定是否進入」的情境。
WHILE 條件 DO
迴圈主體;
END WHILE;
最靈活、結構最簡單的迴圈,適合複雜中斷/繼續邏輯。
[標籤:] LOOP
陳述式;
IF 條件 THEN LEAVE 標籤; END IF; -- 相當於 break
IF 條件 THEN ITERATE 標籤; END IF; -- 相當於 continue
END LOOP [標籤];
SET V_INDEX = 0;
MYLOOP: LOOP
SET V_INDEX = V_INDEX + 1;
IF V_INDEX >= 100 THEN LEAVE MYLOOP; END IF;
IF MOD(V_INDEX, 2) = 0 THEN ITERATE MYLOOP; END IF;
-- 處理奇數邏輯
END LOOP MYLOOP;
類似 do-while,保證迴圈主體最少執行一次。
REPEAT
SQL 陳述式;
UNTIL 條件 -- 條件為真則跳出
END REPEAT;
專為「對查詢結果集逐列處理」設計,自動管理游標開啟/擷取/關閉。
FOR 迴圈名 AS
SELECT ... FROM ...
DO
SQL 陳述式; -- 可直接引用 SELECT 欄位名
END FOR;
FOR c1 AS
SELECT order_id, cust_id FROM orders WHERE status = 'PENDING'
DO
CALL process_order(c1.order_id, c1.cust_id);
END FOR;
| 迴圈類型 | 進入條件 | 至少執行一次 | 適用場景 | 中斷方式 |
|---|---|---|---|---|
| WHILE | 先判斷 | 否 | 條件驅動、次數未知 | 條件變假 / LEAVE |
| LOOP | 無條件 | 是 | 複雜流程、多中斷點 | LEAVE / ITERATE |
| REPEAT | 後判斷 | 是 | 先嘗試再判斷 | UNTIL 條件真 / LEAVE |
| FOR | 查詢結果 | 視結果集 | 逐列處理結果集 | 自動結束 / LEAVE |
掌握四種迴圈的語義差異,能讓 SQL PL 程式碼更簡潔、可讀且不易出錯:逐列處理首選 FOR,複雜控制用 LOOP,條件驅動用 WHILE,保證執行一次用 REPEAT。