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.
Syntaxe¶
WHILE ( <condition> ) { DO | LOOP }
<statement>;
[ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;
Où :
condition
Une expression qui est évaluée à un BOOLEAN.
statement
Une instruction peut être l’un des éléments suivants :
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.
Le mot-clé
DO
doit être associé àEND WHILE
et le mot-cléLOOP
doit être associé àEND LOOP
. Par exemple :while (...) do ... end while; while (...) loop ... end loop;
Exemple¶
Cet exemple utilise une boucle pour calculer une puissance de 2. (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;
$$
;
Voici le résultat de l’exécution de la procédure stockée :
CALL power_of_2();
+------------+
| POWER_OF_2 |
|------------|
| 256 |
+------------+