REPEAT (Snowflake Scripting)

Eine REPEAT-Schleife wird solange wiederholt, bis eine angegebene Bedingung erfüllt ist. Eine REPEAT-Schleife testet die Bedingung am Ende der Schleife. Das bedeutet, dass der Inhalt einer REPEAT-Schleife immer mindestens einmal ausgeführt wird.

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

REPEAT
    <statement>;
    [ <statement>; ... ]
UNTIL ( <condition> )
END REPEAT [ <label> ] ;
Copy

Wobei:

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

condition

Ein Ausdruck, der einen BOOLEAN-Wert ergibt

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 REPEAT Klammern. Beispiel: REPEAT ( <Bedingung> ).

  • Wenn condition nie TRUE ergibt und die Schleife keinen BREAK-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.

Beispiele

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;
    REPEAT
        power_of_2 := power_of_2 * 2;
        counter := counter + 1;
    UNTIL (counter > 8)
    END REPEAT;
    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