LOOP (Snowflakeスクリプト)

LOOP ループは、反復回数または終了条件を指定しません。ユーザーは、ループ内で BREAK または RETURN を使用して、明示的にループを終了する必要があります。

ループの詳細については、 ループの操作 をご参照ください。

注釈

この Snowflakeスクリプト 構造は、 Snowflakeスクリプトブロック 内でのみ有効です。

こちらもご参照ください

BREAKCONTINUERETURN

構文

LOOP
    <statement>;
    [ <statement>; ... ]
END LOOP [ <label> ] ;
Copy

条件:

statement

ステートメントは、次のいずれかになります。

  • 単一の SQL ステートメント(CALL を含む)。

  • 制御フローステートメント(例: ループ または 分岐 ステートメント)。

  • ネストされた ブロック

label

オプションのラベル。このようなラベルは、 BREAK または CONTINUE ステートメントのジャンプターゲットになる可能性があります。ラベルは、 オブジェクト識別子 の名前付け規則に従う必要があります。

使用上の注意

  • LOOP は、 BREAK または RETURN が実行されるまで繰り返されます。 BREAK または RETURN コマンドは、ほとんどの場合、条件式(例: IF または CASE)内にあります。

  • ループには複数のステートメントを含めることができます。これらのステートメントを含めるために BEGIN ... END ブロック を使用できますが、必須ではありません。

このループは、予測可能なテストデータをテーブルに挿入します。

CREATE TABLE dummy_data (ID INTEGER);

CREATE PROCEDURE break_out_of_loop()
RETURNS INTEGER
LANGUAGE SQL
AS
$$
    DECLARE
        counter INTEGER;
    BEGIN
        counter := 0;
        LOOP
            counter := counter + 1;
            IF (counter > 5) THEN
                BREAK;
            END IF;
            INSERT INTO dummy_data (ID) VALUES (:counter);
        END LOOP;
        RETURN counter;
    END;
$$
;
Copy

ストアドプロシージャを実行した結果は次のとおりです。

CALL break_out_of_loop();
+-------------------+
| BREAK_OUT_OF_LOOP |
|-------------------|
|                 6 |
+-------------------+
Copy

ストアドプロシージャを呼び出した後のテーブルのコンテンツは次のとおりです。

SELECT *
    FROM dummy_data
    ORDER BY ID;
+----+
| ID |
|----|
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
+----+
Copy