LOOP 陳述式
LOOP 陳述式會重複執行陳述式或陳述式群組。
語法
說明
- label
- 指定 LOOP 陳述式的標籤。 如果指定結束標籤,則它必須與開始標籤相同。 標籤名稱不能與常式名稱或相同範圍內的另一個標籤相同。 如需相關資訊,請參閱 SQL 標籤的參照。
- SQL-procedure 陳述式
- 指定要在迴圈中執行的 SQL 陳述式
附註
診斷程式區域的考量: 在 LOOP 陳述式的第一次反覆運算開始時,以及每次後續反覆運算時,都會清除診斷程式區域。
SQLSTATE 及 SQLCODE 變數的考量: 在 LOOP 陳述式內執行第一個 SQL-procedure 陳述式 之前, SQLSTATE 及 SQLCODE 值會反映在 LOOP 陳述式之前設定的最後一個值。 如果以 GOTO 或 LEAVE 陳述式終止迴圈,則 SQLSTATE 及 SQLCODE 值會反映該陳述式順利完成。 當 LOOP 陳述式反覆運算時, SQLSTATE 及 SQLCODE 值會反映在 LOOP 陳述式內執行的最後一個 SQL 陳述式的結果。
範例
此程序使用 LOOP 陳述式從員工表格提取值。 每次迴圈反覆運算時, OUT 參數 counter 會增量,並檢查 v_midinit 的值,以確保該值不是單一空格 ('')。 如果 v_midinit 是單一空格,則 LEAVE 陳述式會在迴圈外部傳遞控制流程。
CREATE PROCEDURE LOOP_UNTIL_SPACE (OUT COUNTER INTEGER)
LANGUAGE SQL
BEGIN
DECLARE v_counter INTEGER DEFAULT 0;
DECLARE v_firstnme VARCHAR(12);
DECLARE v_midinit CHAR(1);
DECLARE v_lastname VARCHAR(15);
DECLARE c1 CURSOR FOR
SELECT firstnme, midinit, lastname
FROM employee;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET counter = -1;
OPEN c1;
fetch_loop:
LOOP
FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
IF v_midinit = ' ' THEN
LEAVE fetch_loop;
END IF;
SET v_counter = v_counter + 1;
END LOOP fetch_loop;
SET counter = v_counter;
CLOSE c1;
END