LOOP (Exécution de scripts Snowflake)

Une boucle LOOP ne spécifie pas un nombre d’itérations ou une condition de fin. L’utilisateur doit explicitement quitter la boucle en utilisant BREAK ou RETURN à l’intérieur de la boucle.

Pour plus d’informations sur les boucles, voir Travailler avec des boucles.

Note

Cette construction Exécution de scripts Snowflake n’est valable qu’à l’intérieur d’un bloc Exécution de scripts Snowflake.

Voir aussi:

BREAK, CONTINUE, RETURN

Syntaxe

LOOP
    <statement>;
    [ <statement>; ... ]
END LOOP [ <label> ] ;
Copy

Où :

statement

Une instruction peut être l’un des éléments suivants :

  • Une seule instruction SQL (y compris CALL).

  • Une instruction de flux de contrôle (par exemple, instruction looping ou branching).

  • Un bloc imbriqué.

label

Une étiquette facultative. Une telle étiquette peut être une cible de saut pour une instruction BREAK ou CONTINUE. Une étiquette doit respecter les règles de dénomination de Identificateurs d’objet.

Notes sur l’utilisation

  • Un LOOP se répète jusqu’à ce qu’un BREAK ou RETURN soit exécuté. La commande BREAK ou RETURN se trouve presque toujours à l’intérieur d’une expression conditionnelle (par exemple, IF ou CASE).

  • Une boucle peut contenir plusieurs instructions. Vous pouvez utiliser, sans y être obligé, un block BEGIN … END pour contenir ces instructions.

Exemples

Cette boucle insère des données de test prévisibles dans une table :

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

Voici le résultat de l’exécution de la procédure stockée :

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

Voici le contenu de la table après avoir appelé la procédure stockée :

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