FOR (Snowflakeスクリプト)¶
FOR ループは、特定の回数、一連のステップを繰り返します。回数は、ユーザーが指定することも、 カーソル の行数で指定することもできます。これら2種類の FOR ループの構文は少し異なります。
ループの詳細については、 ループの操作 をご参照ください。
注釈
この Snowflakeスクリプト 構造は、 Snowflakeスクリプトブロック 内でのみ有効です。
構文¶
カーソル のすべての行をループするには、次を使用します。
指定された回数をループするには、次を使用します。
条件:
row_variableオブジェクト識別子 の規則に従う変数名を指定します。
DECLARE または BEGIN ... END セクションにこの変数の宣言を追加しないでください。名前は、ローカルブロックのスコープでまだ定義されていないはずです。
名前は
FORループの内側では有効ですが、FORループの外側では無効です。
row_variableは、カーソルから1行を保持します。その行内のフィールドには、ドット表記を使用してアクセスします。例:
my_row_variable.my_column_nameより包括的な例は、以下の例に含まれています。
counter_variableオブジェクト識別子 の規則に従う変数名を指定します。
counter_variableの名前は、FORループ内でのみ有効です。同じ名前の変数がループの外側で宣言されている場合、外側の変数とループ変数は別々です。ループ内では、その名前への参照がループ変数に解決されます。
FORループ内のコードは、カウンター変数の値を読み取ることができますが、変更はしないでください。たとえば、ステップサイズを変更するためにカウンター変数を手動で増分しないでください。startこれは、
counter_variableの初期値です。開始値は、 INTEGER または INTEGER と評価される式である必要があります。
endこれは、ループ時に
counter_variableが増分された後の、counter_variableの最終値です。終了値は、 INTEGER または INTEGER と評価される式である必要があります。
endの値は、startの値以上である必要があります。endがstart未満の場合、ループは0回実行されます(REVERSEキーワードが使用されている場合でも)。
statementステートメントは、次のいずれかになります。
cursor_name反復するカーソルの名前。
labelオプションのラベル。このようなラベルは、 BREAK (Snowflakeスクリプト) または CONTINUE (Snowflakeスクリプト) ステートメントのジャンプターゲットになる可能性があります。ラベルは、 オブジェクト識別子 の名前付け規則に従う必要があります。
使用上の注意¶
ループは、
endポイントまで反復されます。たとえば、
FOR i IN 1 TO 10は10回ループし、最後の反復ではiの値は10です。REVERSEキーワードを使用すると、ループはstart値まで逆方向に反復されます。ループには複数のステートメントを含めることができます。これらのステートメントを含めるために BEGIN ... END (Snowflakeスクリプト) ブロック を使用できますが、必須ではありません。
オプションのキーワード
REVERSEを使用すると、Snowflakeはendの値で開始し、startの値まで減分します。ループ内で
counter_variableの値を変更できますが、Snowflakeではこれを避けることをお勧めします。値を変更すると、コードが理解しにくくなります。キーワード
DOを使用する場合は、FORループの最後でEND FORを使用します。キーワードLOOPを使用する場合は、FORループの最後でEND LOOPを使用します。
例¶
次のセクションには、さまざまな種類のFORループの例が含まれています。
注釈
その他の例については、 FOR ループ をご参照ください。
カーソルベースの FOR ループ¶
この例は、 カーソル を使用して、クエリによって返されるすべての行の price 列にある値を合計する方法を示しています。このストアドプロシージャは、集計関数のように動作します。
ストアドプロシージャの出力は次のとおりです。
カウンターベースの FOR ループ¶
この例は、 FOR ループを使用して指定された回数を反復する方法を示しています。
ストアドプロシージャの出力は次のとおりです。
次の例は、 REVERSE キーワードを使用して逆方向にカウントする方法を示しています。
ストアドプロシージャの出力は次のとおりです。
次の例は、ループカウンター変数がすでに宣言されている変数と同じ名前(i)である場合の動作を示しています。FOR ループ内では、 i への参照はループカウンター変数に解決されます(ループ外で宣言された変数には解決されません)。
ストアドプロシージャの出力は次のとおりです。