FOR (Exécution de scripts Snowflake)¶
Une boucle FOR répète une séquence d’étapes un nombre spécifique de fois. Le nombre de fois peut être spécifié par l’utilisateur, ou peut être spécifié par le nombre de lignes dans un curseur. La syntaxe de ces deux types de boucles FOR est légèrement différente.
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¶
Pour boucler sur toutes les lignes d’un curseur, utilisez :
Pour boucler un nombre précis de fois, utilisez :
Où :
row_variableSpécifiez un nom de variable qui suit les règles pour Identificateurs d’objet.
N’ajoutez pas de déclaration pour cette variable dans les sections DECLARE ou BEGIN … END. Le nom ne doit pas être déjà défini dans le scope du bloc local.
Le nom est valide à l’intérieur de la boucle
FOR, mais pas à l’extérieur de la boucleFOR.La
row_variablecontient une ligne du curseur. Les champs de cette ligne sont accessibles en utilisant la notation par points. Par exemple :
my_row_variable.my_column_nameUn exemple plus complet est inclus dans les exemples ci-dessous.
counter_variableSpécifiez un nom de variable qui suit les règles pour Identificateurs d’objet.
Le nom de la variable
counter_variablen’est valable qu’à l’intérieur de la boucleFOR. Si une variable portant le même nom est déclarée en dehors de la boucle, la variable externe et la variable de la boucle sont distinctes. Dans la boucle, les références à ce nom sont résolues dans la variable de la boucle.Le code à l’intérieur de la boucle
FORest autorisé à lire la valeur de la variable compteur, mais ne doit pas la modifier. Par exemple, n’incrémentez pas la variable compteur manuellement pour modifier la taille d’incrémentation.startC’est la valeur initiale de
counter_variable.La valeur de départ doit être un INTEGER ou une expression qui donne un INTEGER.
endC’est la valeur finale de
counter_variable, après que lacounter_variablea été incrémentée au fur et à mesure de la boucle.La valeur finale doit être un INTEGER ou une expression qui donne un INTEGER.
La valeur
enddoit être supérieure ou égale à la valeurstart. Siendest inférieur àstart, la boucle s’exécute 0 fois (même si le mot-cléREVERSEest utilisé).
statementUne 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é.
cursor_nameLe nom du curseur à itérer.
labelUne étiquette facultative. Une telle étiquette peut être une cible de saut pour une instruction BREAK (Exécution de scripts Snowflake) ou CONTINUE (Exécution de scripts Snowflake). Une étiquette doit respecter les règles de dénomination de Identificateurs d’objet.
Notes sur l’utilisation¶
La boucle itère jusqu’au point
endinclus.Par exemple,
FOR i IN 1 TO 10boucle 10 fois, et lors de la dernière itération, la valeur deiest 10.Si vous utilisez le mot-clé
REVERSE, la boucle itère alors en sens inverse jusqu’à la valeurstartincluse.Une boucle peut contenir plusieurs instructions. Vous pouvez utiliser, sans y être obligé, un BEGIN … END (Exécution de scripts Snowflake) bloc pour contenir ces instructions.
Le mot-clé facultatif
REVERSEfait que Snowflake commence par la valeurendet décrémente jusqu’à la valeurstart.Bien que vous puissiez modifier la valeur de la variable
counter_variableà l’intérieur de la boucle, Snowflake vous recommande d’éviter de le faire. Changer la valeur rend le code plus difficile à comprendre.Si vous utilisez le mot-clé
DO, alors utilisezEND FORà la fin de la boucleFOR. Si vous utilisez le mot-cléLOOP, alors utilisezEND LOOPà la fin de la boucleFOR.
Exemples¶
Les sections suivantes contiennent des exemples de différents types de boucles FOR :
Note
Pour plus d’exemples, voir boucle FOR.
Boucles FOR basées sur le curseur¶
Cet exemple montre comment utiliser un curseur pour additionner les valeurs de la colonne price de toutes les lignes retournées par une requête. Cette procédure stockée se comporte un peu comme une fonction d’agrégation.
Voici la sortie de la procédure stockée :
Boucles FOR basées sur le compteur¶
Cet exemple montre comment utiliser une boucle FOR pour itérer un nombre spécifié de fois :
Voici la sortie de la procédure stockée :
Cet exemple montre comment utiliser le mot-clé REVERSE pour compter en arrière.
Voici la sortie de la procédure stockée :
L’exemple suivant montre le comportement lorsque la variable du compteur de boucle a le même nom (i) qu’une variable déjà déclarée. Dans la boucle FOR, les références à i se résolvent dans la variable du compteur de la boucle (et non dans la variable déclarée en dehors de la boucle).
Voici la sortie de la procédure stockée :