使用条件逻辑¶
Snowflake Scripting 支持以下条件逻辑的分支结构:
IF-THEN-ELSEIF-ELSE
CASE
IF 语句¶
在 Snowflake Scripting 中,如果使用 IF 语句满足条件,则可以执行一组语句。
IF 语句的语法为:
IF (<condition>) THEN
-- Statements to execute if the <condition> is true.
[ ELSEIF ( <condition_2> ) THEN
-- Statements to execute if the <condition_2> is true.
]
[ ELSE
-- Statements to execute if none of the conditions are true.
]
END IF ;
在 IF 语句中:
如果需要指定其他条件,请为每个条件添加一个 ELSEIF 子句。
要指定在所有条件计算结果均不为 TRUE 时执行的语句,请添加一个 ELSE 子句。
ELSEIF 和 ELSE 子句是可选的。
以下是 IF 语句的简单示例:
BEGIN
LET count := 1;
IF (count < 0) THEN
RETURN 'negative value';
ELSEIF (count = 0) THEN
RETURN 'zero';
ELSE
RETURN 'positive value';
END IF;
END;
注意:如果您在 Python Connector 代码中使用 SnowSQL、Classic Console 或者 execute_stream
或 execute_string
方法,请改用本示例(请参阅 在 SnowSQL、Classic Console 和 Python Connector 中使用 Snowflake Scripting):
EXECUTE IMMEDIATE $$
BEGIN
LET count := 1;
IF (count < 0) THEN
RETURN 'negative value';
ELSEIF (count = 0) THEN
RETURN 'zero';
ELSE
RETURN 'positive value';
END IF;
END;
$$
;
+-----------------+
| anonymous block |
|-----------------|
| positive value |
+-----------------+
有关 IF 语句的完整语法和详细信息,请参阅 IF (Snowflake Scripting)。
CASE 语句¶
CASE 语句的行为与 IF 语句类似,但提供了一种更简单的方法来指定多个条件。
Snowflake Scripting 支持两种形式的 CASE 语句:
接下来的章节将介绍如何使用这些不同的表单。
备注
Snowflake 支持 Snowflake Scripting 之外的关键字 CASE 的其他用法(例如条件表达式 CASE)。
简单 CASE 语句¶
在一个简单 CASE 语句中,您可以为给定表达式的不同可能值定义不同的分支(WHEN 子句)。
简单 CASE 语句的语法为:
CASE ( <expression_to_match> )
WHEN <value_1_of_expression> THEN
<statement>;
[ <statement>; ... ]
[ WHEN <value_2_of_expression> THEN
<statement>;
[ <statement>; ... ]
]
... -- Additional WHEN clauses for other possible values;
[ ELSE
<statement>;
[ <statement>; ... ]
]
END [ CASE ] ;
Snowflake 执行 value_n_of_expression
与 expression_to_match
的值匹配的第一个分支。
例如,假设您要根据 expression_to_evaluate
变量的值执行不同的语句。对于此变量的每个可能值(例如 value a
、value b
等),您可以定义 WHEN 子句来指定要执行的语句:
DECLARE
expression_to_evaluate VARCHAR DEFAULT 'default value';
BEGIN
expression_to_evaluate := 'value a';
CASE (expression_to_evaluate)
WHEN 'value a' THEN
RETURN 'x';
WHEN 'value b' THEN
RETURN 'y';
WHEN 'value c' THEN
RETURN 'z';
WHEN 'default value' THEN
RETURN 'default';
ELSE
RETURN 'other';
END;
END;
注意:如果您在 Python Connector 代码中使用 SnowSQL、Classic Console 或者 execute_stream
或 execute_string
方法,请改用本示例(请参阅 在 SnowSQL、Classic Console 和 Python Connector 中使用 Snowflake Scripting):
EXECUTE IMMEDIATE $$
DECLARE
expression_to_evaluate VARCHAR DEFAULT 'default value';
BEGIN
expression_to_evaluate := 'value a';
CASE (expression_to_evaluate)
WHEN 'value a' THEN
RETURN 'x';
WHEN 'value b' THEN
RETURN 'y';
WHEN 'value c' THEN
RETURN 'z';
WHEN 'default value' THEN
RETURN 'default';
ELSE
RETURN 'other';
END;
END;
$$
;
+-----------------+
| anonymous block |
|-----------------|
| x |
+-----------------+
有关 CASE 语句的完整语法和详细信息,请参阅 CASE (Snowflake Scripting)。
搜索的 CASE 语句¶
在搜索的 CASE 语句中,为每个分支(WHEN 子句)指定不同的条件。Snowflake 执行表达式计算结果为 TRUE 的第一个分支。
搜索的 CASE 语句的语法为:
CASE
WHEN <condition_1> THEN
<statement>;
[ <statement>; ... ]
[ WHEN <condition_2> THEN
<statement>;
[ <statement>; ... ]
]
... -- Additional WHEN clauses for other possible conditions;
[ ELSE
<statement>;
[ <statement>; ... ]
]
END [ CASE ] ;
例如,当您执行以下 CASE 语句时,返回值为 a is x
,因为该分支是表达式计算结果为 TRUE 的第一个分支:
DECLARE
a VARCHAR DEFAULT 'x';
b VARCHAR DEFAULT 'y';
c VARCHAR DEFAULT 'z';
BEGIN
CASE
WHEN a = 'x' THEN
RETURN 'a is x';
WHEN b = 'y' THEN
RETURN 'b is y';
WHEN c = 'z' THEN
RETURN 'c is z';
ELSE
RETURN 'a is not x, b is not y, and c is not z';
END;
END;
注意:如果您在 Python Connector 代码中使用 SnowSQL、Classic Console 或者 execute_stream
或 execute_string
方法,请改用本示例(请参阅 在 SnowSQL、Classic Console 和 Python Connector 中使用 Snowflake Scripting):
EXECUTE IMMEDIATE $$
DECLARE
a VARCHAR DEFAULT 'x';
b VARCHAR DEFAULT 'y';
c VARCHAR DEFAULT 'z';
BEGIN
CASE
WHEN a = 'x' THEN
RETURN 'a is x';
WHEN b = 'y' THEN
RETURN 'b is y';
WHEN c = 'z' THEN
RETURN 'c is z';
ELSE
RETURN 'a is not x, b is not y, and c is not z';
END;
END;
$$
;
+-----------------+
| anonymous block |
|-----------------|
| a is x |
+-----------------+
有关 CASE 语句的完整语法和详细信息,请参阅 CASE (Snowflake Scripting)。