WHILE (Exécution de scripts Snowflake)

Une boucle WHILE itère pendant qu’une condition spécifiée est vraie.

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

Syntaxe

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

Où :

condition

Une expression qui est évaluée à un BOOLEAN.

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, une instruction de bouclage ou de branchement).

  • 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

  • Mettez des parenthèses autour de la condition dans le WHILE. Par exemple : WHILE ( <condition> ).

  • Si la condition ne correspond jamais à FALSE, et que la boucle ne contient pas de commande BREAK (Exécution de scripts Snowflake) (ou équivalente), alors la boucle s’exécutera et consommera des crédits indéfiniment.

  • Si la condition est NULL, alors elle est traitée comme FALSE.

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

  • Associez le mot-clé DO à END WHILE et associez le mot-clé LOOP à END LOOP. Par exemple :

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

Exemples

Cet exemple utilise une boucle pour calculer une puissance de 2. La variable counter est le compteur de la boucle. La variable power_of_2 stocke la dernière puissance de 2 calculée. (Cette solution est inefficace, mais elle permet de démontrer le bouclage)

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

Appelez la procédure stockée :

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

Cet exemple utilise une boucle et la fonction DATEADD pour ajouter un jour à une date jusqu’à ce que la condition soit remplie.

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 |
+-------------------------+

Pour plus d’exemples, voir boucle WHILE.