WHILE (Snowflake Scripting)

当指定条件为 true 时,WHILE 循环进行迭代。

有关循环的更多信息,请参阅 使用循环

备注

Snowflake Scripting 结构仅在 Snowflake Scripting 区块 内有效。

另请参阅:

BREAKCONTINUE

语法

WHILE ( <condition> ) { DO | LOOP }
    <statement>;
    [ <statement>; ... ]
END { WHILE | LOOP } [ <label> ] ;
Copy

其中:

condition

计算结果为 BOOLEAN 的表达式。

statement

语句可以是以下任一语句:

  • 单个 SQL 语句(包括 CALL)。

  • 控制流语句(例如 循环 语句或 分支 语句)。

  • 嵌套 区块

label

可选标签。此类标签可以是 BREAKCONTINUE 语句的跳转目标。标签必须遵循 对象标识符 的命名规则。

使用说明

  • WHILE 中将条件放在括号内。例如:WHILE ( <condition> )

  • 如果 condition 从不评估为 FALSE,并且循环不包含 BREAK (Snowflake Scripting) 命令(或等效命令),则循环将无限期运行并消耗 Credit。

  • 如果 condition 为 NULL,则将其视为 FALSE。

  • 一个循环可以包含多个语句。您可以(但不是必须)使用 BEGIN ...END 区块 包含这些语句。

  • 将关键字 DOEND WHILE 配对,将关键字 LOOPEND LOOP 配对。例如:

    WHILE (...) DO
        ...
    END WHILE;
    
    WHILE (...) LOOP
        ...
    END LOOP;
    
    Copy

示例

此示例使用循环计算 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;
$$
;
Copy

调用存储过程:

CALL power_of_2();
Copy
+------------+
| 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;
$$
;
Copy
+-------------------------+
| anonymous block         |
|-------------------------|
| 2024-05-20 00:00:00.000 |
+-------------------------+

有关更多示例,请参阅 WHILE 循环

语言: 中文