LOOP 陳述式

LOOP 陳述式會重複執行陳述式或陳述式群組。

語法

讀取語法圖跳過視覺化語法圖標籤LOOPSQL-procedure-statement ;END LOOP label

說明

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