FOR 语句

适用于:已选中“是” Databricks SQL 已选中“是” Databricks Runtime 16.3 及更高版本

重要

此功能目前以公共预览版提供。

针对查询返回的每一行重复执行语句列表。

此语句只能在 复合语句中使用。

语法

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

参数

  • 标签

    循环的可选标签,它在包含 FOR 语句的所有语句的标签中是唯一的。 如果指定了结束标签,则它必须与起始标签匹配。 标签可用于 LEAVEITERATE 循环。 若要限定循环列引用,请使用 , variable_name而不是 label.

  • variable_name

    在引用游标中的列时充当限定符的可选名称。

  • stmt

    SQL 语句

注释

如果运行查询的表也在循环主体中被修改,则语义取决于数据源。 对于 Delta 表,查询将不受影响。 如果 FOR 循环因 LEAVE 语句或错误条件过早完成,Databricks 不能保证查询的完全执行。 在执行查询期间发生异常或副作用时,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