REPEAT ステートメント
REPEAT ステートメントは、 検索条件が真になるまでステートメントまたはステートメントのグループを実行します。
呼び出し
このステートメントは、以下の対象に組み込むことができます。
- SQL プロシージャー定義
- コンパウンド SQL (コンパイル済み) ステートメント
- コンパウンド SQL (インライン化) ステートメント
許可
REPEAT ステートメントを呼び出すために、特権は必要ありません。 ただし、ステートメントの許可 ID には、 REPEAT ステートメントに組み込まれている SQL ステートメントおよび検索条件を呼び出すために必要な特権がなければなりません。
構文
説明
- label
- REPEAT ステートメントのラベルを指定します。 開始ラベルを指定した場合、 そのラベルを 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 を参照してください。
- search-condition
- search-condition は、毎回、REPEAT ループの実行後に評価されます。 条件が真であれば、ループは終了します。 条件が不明または偽であれば、ループは続行されます。
例
REPEAT ステートメントは、not_found 条件処理ルーチンが呼び出されるまで、
表から行を取り出します。
CREATE PROCEDURE REPEAT_STMT(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 at_end SMALLINT DEFAULT 0;
DECLARE not_found CONDITION FOR SQLSTATE '02000';
DECLARE c1 CURSOR FOR
SELECT firstnme, midinit, lastname
FROM employee;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;
OPEN c1;
fetch_loop:
REPEAT
FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
SET v_counter = v_counter + 1;
UNTIL at_end > 0
END REPEAT fetch_loop;
SET counter = v_counter;
CLOSE c1;
END