WHILE (Snowflake Scripting)¶
当指定条件为 true 时,WHILE
循环进行迭代。
有关循环的更多信息,请参阅 使用循环。
备注
本 Snowflake Scripting 结构仅在 Snowflake Scripting 区块 内有效。
语法¶
WHILE ( <condition> ) { DO | LOOP }
<statement>;
[ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;
其中:
使用说明¶
在
WHILE
中将条件放在括号内。例如:WHILE ( <condition> )
。如果
condition
从不评估为 FALSE,并且循环不包含 BREAK (Snowflake Scripting) 命令(或等效命令),则循环将无限期运行并消耗 Credit。如果
condition
为 NULL,则将其视为 FALSE。一个循环可以包含多个语句。您可以(但不是必须)使用 BEGIN ...END 区块 包含这些语句。
将关键字
DO
与END WHILE
配对,将关键字LOOP
与END LOOP
配对。例如:WHILE (...) DO ... END WHILE; WHILE (...) LOOP ... END LOOP;
示例¶
此示例使用循环计算 2 的次方。counter
变量是循环计数器。power_of_2
变量存储最近计算的 2 次幂。(这是一个低效的解决方案,但它演示了循环。)
CREATE PROCEDURE power_of_2()
RETURNS NUMBER(8, 0)
LANGUAGE SQL
AS
$$
DECLARE
counter NUMBER(8, 0); -- Loop counter.
power_of_2 NUMBER(8, 0); -- Stores the most recent power of 2 that we calculated.
BEGIN
counter := 1;
power_of_2 := 1;
WHILE (counter <= 8) DO
power_of_2 := power_of_2 * 2;
counter := counter + 1;
END WHILE;
RETURN power_of_2;
END;
$$
;
调用存储过程:
CALL power_of_2();
+------------+
| POWER_OF_2 |
|------------|
| 256 |
+------------+
本例使用循环和 DATEADD 函数向日期添加一天,直到满足条件。
EXECUTE IMMEDIATE $$
BEGIN
LET mydate := '2024-05-08';
WHILE (mydate < '2024-05-20') DO
mydate := DATEADD(day, 1, mydate);
END WHILE;
RETURN mydate;
END;
$$
;
+-------------------------+
| anonymous block |
|-------------------------|
| 2024-05-20 00:00:00.000 |
+-------------------------+
有关更多示例,请参阅 WHILE 循环。