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

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

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

Rufen Sie die gespeicherte Prozedur auf:

CALL power_of_2();
Copy
+------------+
| 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;
$$
;
Copy
+-------------------------+
| anonymous block         |
|-------------------------|
| 2024-05-20 00:00:00.000 |
+-------------------------+

Weitere Beispiele finden Sie unter WHILE-Schleife.