条件付きロジックの操作¶
Snowflakeスクリプトは、条件付きロジックの次の分岐構造をサポートしています。
IF-THEN-ELSEIF-ELSE
CASE
IF ステートメント¶
Snowflakeスクリプトでは、 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;
注: SnowSQL、 Classic Console、 execute_stream
または execute_string
メソッドを Python Connector コードで使用している場合は、代わりにこの例を使用してください(SnowSQL、 Classic Console、Python ConnectorでSnowflakeスクリプトを使用する を参照)。
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スクリプト) をご参照ください。
CASE ステートメント¶
CASE ステートメントは IF ステートメントと同様に動作しますが、複数の条件を指定するためのより簡単な方法を提供します。
Snowflakeスクリプトは、次に挙げる2つの形式の CASE ステートメントをサポートしています。
次のセクションでは、こうした異なるフォームの使用方法について説明します。
注釈
Snowflakeは、Snowflakeスクリプト以外において、キーワード 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;
注: SnowSQL、 Classic Console、 execute_stream
または execute_string
メソッドを Python Connector コードで使用している場合は、代わりにこの例を使用してください(SnowSQL、 Classic Console、Python ConnectorでSnowflakeスクリプトを使用する を参照)。
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スクリプト) をご参照ください。
検索された 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 ステートメントを実行すると、その分岐は式が TRUE と評価される最初の分岐であるため、戻り値は a is x
になります。
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;
注: SnowSQL、 Classic Console、 execute_stream
または execute_string
メソッドを Python Connector コードで使用している場合は、代わりにこの例を使用してください(SnowSQL、 Classic Console、Python ConnectorでSnowflakeスクリプトを使用する を参照)。
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スクリプト) をご参照ください。