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.

Siehe auch::

BREAK, CONTINUE

Syntax

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

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 mit END WHILE und das Schlüsselwort LOOP mit END LOOP verwendet. Beispiel:

    while (...) do
        ...
    end while;
    
    while (...) loop
        ...
    end loop;
    
    Copy

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;
$$
;
Copy

Bei Ausführung der gespeicherten Prozedur wird folgende Ausgabe erstellt:

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