WHILE (Snowflakeスクリプト)

WHILE ループは、指定された条件がtrueの間、反復されます。

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

注釈

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

こちらもご参照ください:

BREAKCONTINUE

構文

WHILE ( <condition> ) { DO | LOOP }
    <statement>;
    [ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;
Copy

条件:

condition

BOOLEAN に評価される式。

statement

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

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

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

  • ネストされた ブロック

label

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

使用上の注意

  • WHILE の条件を括弧で囲みます。例: WHILE ( <条件> )

  • condition が FALSE と評価されることがなく、ループに BREAK (Snowflakeスクリプト) コマンド(または同等のコマンド)が含まれていない場合、ループは無期限に実行され、クレジットを消費します。

  • condition が NULL の場合は、 FALSE として扱われます。

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

  • キーワード DOEND WHILE とペアにし、キーワード LOOPEND LOOP とペアにします。例:

    WHILE (...) DO
        ...
    END WHILE;
    
    WHILE (...) LOOP
        ...
    END LOOP;
    
    Copy

この例では、ループを使用して2の累乗を計算します。変数 counter はループカウンターです。 power_of_2 変数には、最近計算された2のべき乗が格納されます。(これは非効率的な解決策ですが、ループを実証しています。)

CREATE PROCEDURE power_of_2()
RETURNS NUMBER(8, 0)
LANGUAGE SQL
AS
$$
DECLARE
  counter NUMBER(8, 0);      -- Loop counter.
  power_of_2 NUMBER(8, 0);   -- Stores the most recent power of 2 that we calculated.
BEGIN
  counter := 1;
  power_of_2 := 1;
  WHILE (counter <= 8) DO
    power_of_2 := power_of_2 * 2;
    counter := counter + 1;
  END WHILE;
  RETURN power_of_2;
END;
$$
;
Copy

ストアドプロシージャを呼び出します。

CALL power_of_2();
Copy
+------------+
| POWER_OF_2 |
|------------|
|        256 |
+------------+

この例では、ループと DATEADD 関数を使用して、条件が満たされるまで日付に日を追加しています。

EXECUTE IMMEDIATE $$
BEGIN
  LET mydate := '2024-05-08';
  WHILE (mydate < '2024-05-20') DO
    mydate := DATEADD(day, 1, mydate);
  END WHILE;
  RETURN mydate;
END;
$$
;
Copy
+-------------------------+
| anonymous block         |
|-------------------------|
| 2024-05-20 00:00:00.000 |
+-------------------------+

その他の例については、 WHILE ループ をご参照ください。