PL/SQL 提供基本的 LOOP ... END LOOP 無限迴圈,搭配 EXIT WHEN condition 或 IF ... THEN EXIT; END IF; 實現可控迴圈。本文展示最小可運行範例並解析執行流程。
DECLARE
x NUMBER := 0;
BEGIN
LOOP
x := x + 1; -- 迴圈體:遞增
IF x > 3 THEN -- 條件判斷
EXIT; -- 滿足條件跳出迴圈
END IF;
DBMS_OUTPUT.PUT_LINE('內 x 的值: ' || x); -- 印出 1, 2, 3
END LOOP;
DBMS_OUTPUT.PUT_LINE('外 X 的值: ' || x); -- 印出 4
END;
/
-- 輸出:
-- 內 x 的值: 1
-- 內 x 的值: 2
-- 內 x 的值: 3
-- 外 X 的值: 4
START x := 0 ┌─────────────────────┐ │ LOOP │ │ x := x + 1 │ │ IF x > 3 THEN │──Yes──► EXIT LOOP │ EXIT │ │ END IF │ │ PRINT x │──No───► (繼續下一輪) └─────────────────────┘ PRINT x (最終值 4) END
| 寫法 | 代碼 | 特點 |
|---|---|---|
| 基本 LOOP + EXIT WHEN | LOOP x := x + 1; EXIT WHEN x > 3; DBMS_OUTPUT.PUT_LINE(x); END LOOP; | 最簡潔,條件在迴圈頂部 |
| WHILE 迴圈 | WHILE x <= 3 LOOP x := x + 1; DBMS_OUTPUT.PUT_LINE(x); END LOOP; | 條件前置,進入前先判斷 |
| FOR 迴圈 | FOR x IN 1..3 LOOP DBMS_OUTPUT.PUT_LINE(x); END LOOP; | 固定範圍迭代,無需手動管理計數器 |
| 游標 FOR 迴圈 | FOR rec IN (SELECT * FROM emp) LOOP DBMS_OUTPUT.PUT_LINE(rec.ename); END LOOP; | 隱式開啟/關閉游標,逐行處理查詢結果 |