使用条件逻辑

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 ;
Copy

在 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;
Copy

注意:如果您在 Python Connector 代码中使用 SnowSQLClassic Console 或者 execute_streamexecute_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;
$$
;
Copy
+-----------------+
| 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 ] ;
Copy

Snowflake 执行 value_n_of_expressionexpression_to_match 的值匹配的第一个分支。

例如,假设您要根据 expression_to_evaluate 变量的值执行不同的语句。对于此变量的每个可能值(例如 value avalue 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;
Copy

注意:如果您在 Python Connector 代码中使用 SnowSQLClassic Console 或者 execute_streamexecute_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;
$$
;
Copy
+-----------------+
| 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 ] ;
Copy

例如,当您执行以下 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;
Copy

注意:如果您在 Python Connector 代码中使用 SnowSQLClassic Console 或者 execute_streamexecute_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;
$$
;
Copy
+-----------------+
| anonymous block |
|-----------------|
| a is x          |
+-----------------+

有关 CASE 语句的完整语法和详细信息,请参阅 CASE (Snowflake Scripting)

语言: 中文