分岐構造の操作

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 is 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 または 従来のウェブインターフェイス を使用している場合は、代わりに次の例を使用します(SnowSQL での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;
$$
;

IF ステートメントの完全な構文と詳細については、 IF をご参照ください。

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

注: SnowSQL または 従来のウェブインターフェイス を使用している場合は、代わりに次の例を使用します(SnowSQL での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;
$$
;

CASE ステートメントの完全な構文と詳細については、 CASE をご参照ください。

検索された 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 または 従来のウェブインターフェイス を使用している場合は、代わりに次の例を使用します(SnowSQL での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;
$$
;

CASE ステートメントの完全な構文と詳細については、 CASE をご参照ください。

最上部に戻る