CASEcase_value
WHENwhen_value
THENstatement_list
[WHENwhen_value
THENstatement_list
] ... [ELSEstatement_list
] END CASE
または
CASE WHENsearch_condition
THENstatement_list
[WHENsearch_condition
THENstatement_list
] ... [ELSEstatement_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
で終了します。