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. 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 die
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.
Das Schlüsselwort
DO
wird zusammen mitEND WHILE
und das SchlüsselwortLOOP
mitEND LOOP
verwendet. Beispiel:while (...) do ... end while; while (...) loop ... end loop;
Beispiel¶
Im folgenden Beispiel wird eine Schleife zur Berechnung einer Potenz von 2 verwendet. (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;
$$
;
Bei Ausführung der gespeicherten Prozedur wird folgende Ausgabe erstellt:
CALL power_of_2();
+------------+
| POWER_OF_2 |
|------------|
| 256 |
+------------+