CASEcase_valueWHENwhen_valueTHENstatement_list[WHENwhen_valueTHENstatement_list] ... [ELSEstatement_list] END CASE
または
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
ストアドプログラムの
CASE
ステートメントは、複雑な条件構造構文を実装します。search_condition
が真の場合、該当する SQL
ステートメントが実行されます。検索条件が合致しない場合、ELSE
節内のステートメントリストが実行されます。各
statement_list
は複数のステートメントから成り立っています。
when_value または
search_condition
がテスト済みの値に一致せず、CASE
ステートメントに
ELSE
節が含まれていない場合は、 Case not
found for CASE statement
エラーが発生します。
各 statement_list は、1
つ以上のステートメントで構成されます。空の
statement_list
は許可されません。次の例に示すように、値がどの
WHEN
節にも一致しない状況に対処するには、空の
BEGIN ... END
ブロックを含む ELSE
を使用します。
DELIMITER |
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN
END;
END CASE;
END;
|
(ここの ELSE
節で使用されているインデントは透明性のみを目的にしており、それ以外の意味はありません。)
ストアドプログラムの内部で使用されている
CASE
ステートメントの構文は、項7.3. 「制御フロー関数」
で説明されている SQL
CASE
式の構文とは若干異なります。CASE
ステートメントは ELSE
NULL
節を持つことができず、END
でなく、END CASE
で終了します。
