WHILE (Snowflake Scripting)¶
Eine WHILE
-Schleife wird wiederholt, solange eine angegebene Bedingung erfüllt ist.
Weitere Informationen zu Schleifen finden Sie unter Verwenden von Schleifen.
Bemerkung
Dieses Snowflake Scripting-Konstrukt ist nur innerhalb eines Snowflake Scripting-Blocks gültig.
Syntax¶
WHILE ( <condition> ) { DO | LOOP }
<statement>;
[ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;
Wobei:
condition
Ein Ausdruck, der einen BOOLEAN-Wert ergibt
statement
Folgende Typen von Anweisungen sind möglich:
Eine einzelne SQL-Anweisung (einschließlich CALL)
Eine Ablaufsteuerungsanweisung (z. B. eine Schleife oder Verzweigung)
Ein verschachtelter Block
label
Ein optionales Label. Ein solches Label kann ein Sprungziel für eine BREAK- oder CONTINUE-Anweisung sein. Der Name muss den Regeln für Bezeichner folgen (siehe unter Objektbezeichner).
Nutzungshinweise¶
Verwenden Sie um die Bedingung in
WHILE
Klammern. Beispiel:WHILE ( <Bedingung> )
.Wenn
condition
nie FALSE ergibt und die Schleife keinen BREAK (Snowflake Scripting)-Befehl (oder etwas Äquivalentes) enthält, dann wird die Schleife unendliche Male ausgeführt und es werden unbegrenzt Credits verbraucht.Wenn die
condition
NULL ist, dann wird sie als FALSE behandelt.Eine Schleife kann mehrere Anweisungen enthalten. Sie können, müssen aber nicht, einen BEGIN … END-Block verwenden, um diese Anweisungen aufzunehmen.
Paaren Sie das Schlüsselwort
DO
mitEND WHILE
und das SchlüsselwortLOOP
mitEND LOOP
. Beispiel:WHILE (...) DO ... END WHILE; WHILE (...) LOOP ... END LOOP;
Beispiele¶
Im folgenden Beispiel wird eine Schleife zur Berechnung einer Potenz von 2 verwendet. Die Variable counter
ist der Schleifenzähler. Die Variable power_of_2
speichert die letzte Potenz von 2, die berechnet wurde. (Dies ist eine ineffiziente Lösung, aber sie demonstriert die Schleifenbildung)
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;
$$
;
Rufen Sie die gespeicherte Prozedur auf:
CALL power_of_2();
+------------+
| POWER_OF_2 |
|------------|
| 256 |
+------------+
Dieses Beispiel verwendet eine Schleife und die Funktion DATEADD, um einen Tag zu einem Datum hinzuzufügen, bis die Bedingung erfüllt ist.
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 |
+-------------------------+
Weitere Beispiele finden Sie unter WHILE-Schleife.