LOOP ステートメント

LOOP ステートメントは、ステートメント、またはステートメントのグループの実行を繰り返します。

呼び出し

このステートメントは、以下の対象に組み込むことができます。
  • SQL プロシージャー定義
  • コンパウンド SQL (コンパイル済み) ステートメント
  • コンパウンド SQL (インライン化) ステートメント
コンパウンド・ステートメントは、SQL プロシージャー定義、SQL 関数定義、または SQL トリガー定義に組み込むことができます。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

LOOP ステートメントを呼び出すために、特権は必要ありません。 ただし、ステートメントの許可 ID には、LOOP ステートメントに組み込まれている SQL ステートメントを呼び出すために必要な特権がなければなりません。

構文

構文図を読む構文図をスキップするlabel:LOOP SQL-routine-statementEND LOOPlabel
SQL-routine-statement
構文図を読む構文図をスキップするSQL-procedure-statement;SQL-function-statement;

説明

label
LOOP ステートメントのラベルを指定します。 開始ラベルを指定した場合、 そのラベルを LEAVE および ITERATE ステートメントで指定することができます。 終了ラベルを指定する場合、一致する開始ラベルを指定しなければなりません。
SQL-procedure-statement
ループ内で呼び出される SQL ステートメントを指定します。 SQL-procedure-statement を適用できるのは、SQL プロシージャーのコンテキスト内、またはコンパウンド SQL (コンパイル済み) ステートメント内に限られます。『コンパウンド SQL (コンパイル済み)』ステートメントの SQL-procedure-statement を参照してください。
SQL-function-statement
ループ内で呼び出される SQL ステートメントを指定します。 SQL-function-statement を適用できるのは、SQL 関数、SQL メソッド、またはコンパウンド SQL (インライン化) ステートメントのコンテキスト内に限られます。『FOR』で、SQL-function-statement を参照してください。

以下のプロシージャーでは、LOOP ステートメントを使用して、 employee 表から値を取り出します。 ループが繰り返されるたびに、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