WHILE (Snowflakeスクリプト)¶
WHILE
ループは、指定された条件がtrueの間、反復されます。
ループの詳細については、 ループの操作 をご参照ください。
注釈
この Snowflakeスクリプト 構造は、 Snowflakeスクリプトブロック 内でのみ有効です。
構文¶
WHILE ( <condition> ) { DO | LOOP }
<statement>;
[ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;
条件:
使用上の注意¶
WHILE
の条件を括弧で囲みます。例:WHILE ( <条件> )
。condition
が FALSE と評価されることがなく、ループに BREAK (Snowflakeスクリプト) コマンド(または同等のコマンド)が含まれていない場合、ループは無期限に実行され、クレジットを消費します。condition
が NULL の場合は、 FALSE として扱われます。ループには複数のステートメントを含めることができます。これらのステートメントを含めるために BEGIN ... END ブロック を使用できますが、必須ではありません。
キーワード
DO
をEND WHILE
とペアにし、キーワードLOOP
をEND LOOP
とペアにします。例:WHILE (...) DO ... END WHILE; WHILE (...) LOOP ... END LOOP;
例¶
この例では、ループを使用して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;
$$
;
ストアドプロシージャを呼び出します。
CALL power_of_2();
+------------+
| 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;
$$
;
+-------------------------+
| anonymous block |
|-------------------------|
| 2024-05-20 00:00:00.000 |
+-------------------------+
その他の例については、 WHILE ループ をご参照ください。