适用于: Databricks SQL
Databricks Runtime 16.3 及更高版本
重要
此功能目前以公共预览版提供。
针对查询返回的每一行重复执行语句列表。
此语句只能在 复合语句中使用。
语法
[ label : ] FOR [ variable_name AS ] query
DO
{ stmt ; } [...]
END FOR [ label ]
参数
-
循环的可选标签,它在包含
FOR
语句的所有语句的标签中是唯一的。 如果指定了结束标签,则它必须与起始标签匹配。 标签可用于 LEAVE 或 ITERATE 循环。 若要限定循环列引用,请使用 ,variable_name
而不是label
. -
在引用游标中的列时充当限定符的可选名称。
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