ループ (LOOP) ステートメント
LOOP ステートメントは、1 つのステートメントまたは 1 グループの ステートメントの実行を繰り返します。
構文
.-----------------------------. V | >>-+--------+--LOOP----SQL-procedure-statement-- ; +------------> '-label:-' >--END LOOP--+-------+----------------------------------------->< '-label-'
説明
- label
- LOOP ステートメントのラベルを指定します。 終了ラベルを指定する場合、開始ラベルと同じにしなければなりません。このラベル名は、ルーチン名または同じ有効範囲内の別のラベルと同じものにすることはできません。 詳しくは、SQL ラベルの参照を参照してください。
- SQL プロシージャー・ステートメント
- ループで実行する SQL ステートメントを指定します。
注
診断領域に関する考慮事項: LOOP ステートメントの最初の繰り返しの開始時、および以降のすべての繰り返し時に、診断領域はクリアされます。
SQLSTATE および SQLCODE 変数に関する考慮事項: LOOP ステートメント内の最初の SQL プロシージャー・ステートメント を実行する前に、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