【Snowflake】ストアド ~ 基本編 / 条件分岐 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/12/23/223345

で、IF文を使ったが、
どうせなら、Snowflake の 条件分岐 をまとめておけば
ストアドの基本的なことは、網羅されると思うので
今回でメモっておく。

目次

【0】Snowflake での条件分岐
【1】IF文
【2】CASE文
 1)単純CASE式(simple case)
 2)検索CASE式(searched case)
【3】サンプル
 例1:IF文
 例2:単純CASE式(simple case)
 例3:検索CASE式(searched case)

【0】Snowflake での条件分岐

* Snowflake での条件分岐は、以下の通り。
 => Snowflake においても、普通のSQLと変わらない

https://docs.snowflake.com/ja/developer-guide/snowflake-scripting/branch.html

~~~~~~~~~~~~~~
【1】IF文
【2】CASE文
~~~~~~~~~~~~~~

【1】IF文

https://docs.snowflake.com/ja/sql-reference/snowflake-scripting/if.html
https://docs.snowflake.com/ja/developer-guide/snowflake-scripting/branch.html#if-statements

IF (<condition>) THEN
  -- Statements to execute if the <condition> is true.
[ ELSEIF (<condition2>) THEN -- ★注意★「else if」でなく「elseif」
  -- Statements to execute if the <condition2> is true.
]
[ ELSE
   -- Statements to execute if none of the conditions is true.
]
END IF;

【2】CASE文

https://docs.snowflake.com/ja/sql-reference/snowflake-scripting/case.html

* 2ケースある。
 => こちらも、普通のSQLと変わらない

https://docs.snowflake.com/ja/developer-guide/snowflake-scripting/branch.html#case-statements

~~~~~~~~~~~~~~
1)単純CASE式(simple case)
2)検索CASE式(searched case)
~~~~~~~~~~~~~~

1)単純CASE式(simple case)

https://docs.snowflake.com/ja/developer-guide/snowflake-scripting/branch.html#simple-case-statements

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

2)検索CASE式(searched case)

https://docs.snowflake.com/ja/developer-guide/snowflake-scripting/branch.html#searched-case-statements

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

【3】サンプル

* 以下の「例1」~「例3」について、
 書き方は違うが処理内容的には同じ

例1:IF文

execute immediate $$
declare
  target_num number default 1;
begin
    if (target_num = 1) then
        return 'one';
    elseif (target_num = 2) then
        return 'two';
    else
        return 'Unexpected input.';
    end if;
end;
$$
;

例2:単純CASE式(simple case)

execute immediate $$
declare
  target_num number default 1;
begin
  case (target_num)
    when 1 then
      return 'one';
    when 2 then
      return 'two';
    else
      return 'unexpected choice';
  end;
end;
$$
;

例3:検索CASE式(searched case)

execute immediate $$
declare
  target_num number default 1;
begin
  case
    when target_num = 1 then
      return 'one';
    when target_num = 2 then
      return 'two';
    else
      return 'unexpected choice';
  end;
end;
$$
;

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake】ストアド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/12/11/202904
Snowflake】ストアド ~ 基本編 / ループ ~
https://dk521123.hatenablog.com/entry/2022/12/16/143349
Snowflake】ストアド ~ EXECUTE IMMEDIATE ~
https://dk521123.hatenablog.com/entry/2022/12/17/000217
Snowflake】ストアド ~ クエリ結果を受け取る ~
https://dk521123.hatenablog.com/entry/2022/12/24/212242
Snowflake】ストアド ~ 例外 / EXCEPTION ~
https://dk521123.hatenablog.com/entry/2022/12/23/223345
Snowflake】ストアド ~ デバッグログについて ~
https://dk521123.hatenablog.com/entry/2022/12/18/121334
Snowflake ~ テストデータ作成 / generator ~
https://dk521123.hatenablog.com/entry/2022/06/20/095659
ストアド ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2010/08/06/112528
SQL ~ CASE文 ~
https://dk521123.hatenablog.com/entry/2010/08/03/195704