LOOP (Snowflake Scripting)

Bei einer LOOP-Schleife wird weder eine Anzahl von Iterationen noch eine Abbruchbedingung angegeben. Der Benutzer muss die Schleife explizit verlassen, indem innerhalb der Schleife BREAK oder RETURN verwendet 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, RETURN

Syntax

LOOP
    <statement>;
    [ <statement>; ... ]
END LOOP [ <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

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

  • Eine LOOP-Schleife wird so lange wiederholt, bis ein BREAK oder RETURN ausgeführt wird. Der Befehl BREAK oder RETURN steht fast immer innerhalb eines bedingten Ausdrucks (z. B. IF oder CASE).

  • Eine Schleife kann mehrere Anweisungen enthalten. Sie können, müssen aber nicht, einen BEGIN … END-Block verwenden, um diese Anweisungen aufzunehmen.

Beispiele

Diese Schleife fügt vorhersagbare Testdaten in eine Tabelle ein:

CREATE TABLE dummy_data (ID INTEGER);

CREATE PROCEDURE break_out_of_loop()
RETURNS INTEGER
LANGUAGE SQL
AS
$$
    DECLARE
        counter INTEGER;
    BEGIN
        counter := 0;
        LOOP
            counter := counter + 1;
            IF (counter > 5) THEN
                BREAK;
            END IF;
            INSERT INTO dummy_data (ID) VALUES (:counter);
        END LOOP;
        RETURN counter;
    END;
$$
;
Copy

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

CALL break_out_of_loop();
+-------------------+
| BREAK_OUT_OF_LOOP |
|-------------------|
|                 6 |
+-------------------+
Copy

Hier ist der Inhalt der Tabelle nach dem Aufruf der gespeicherten Prozedur:

SELECT *
    FROM dummy_data
    ORDER BY ID;
+----+
| ID |
|----|
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
+----+
Copy