次の方法で共有


FOR ステートメント

適用対象:チェックで「はい」とマーク Databricks SQL チェックで「はい」とマーク Databricks Runtime 16.3 以降

クエリによって返される各行に対して、ステートメントの一覧の実行を繰り返します。

このステートメントは、複合ステートメント内でのみ使用できます。

構文

[ label : ] FOR [ variable_name AS ] query
  DO
  { stmt ; } [...]
  END FOR [ label ]

パラメーター

  • ラベル

    FOR ステートメントが含まれるステートメントのすべてのラベルの間で一意である、ループのラベル (省略可能)。 終了ラベルを指定する場合は、先頭ラベルと一致する必要があります。 ラベルは、 ループを終了 または 反復処理 するために使用できます。 ループ列参照を修飾するには、variable_nameではなく、labelを使用します。

  • variable_name

    カーソル内の列を参照するときに修飾子として使用できる省略可能な名前。

  • stmt

    SQL ステートメント

注記

クエリがループの本文内で変更されたテーブルに対して動作する場合、セマンティクスはデータ ソースに依存します。 デルタ テーブルの場合、クエリは影響を受けません。 databricks では、FOR ステートメントまたはエラー条件が原因でLEAVE ループが途中で完了した場合、クエリの完全な実行は保証されません。 クエリの実行中に例外や副作用が発生した場合、Databricks はループ内のどの時点で発生するかを保証しません。 多くの場合、 FOR ループはリレーショナル クエリに置き換えることができます。これは通常、より効率的です。

例示

-- sum up all odd numbers from 1 through 10
> BEGIN
    DECLARE sum INT DEFAULT 0;
    sumNumbers: FOR row AS SELECT num FROM range(1, 20) AS t(num) DO
      IF num > 10 THEN
         LEAVE sumNumbers;
      ELSEIF num % 2 = 0 THEN
        ITERATE sumNumbers;
      END IF;
      SET sum = sum + row.num;
    END FOR sumNumbers;
    VALUES (sum);
  END;
 25

-- Compare with the much more efficient relational computation:
> SELECT sum(num) FROM range(1, 10) AS t(num) WHERE num % 2 = 1;
 25