CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASEOr:
CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE
        The CASE statement for stored
        programs implements a complex conditional construct.
          There is also a CASE
          operator, which differs from the
          CASE
          statement described here. See
          Section 14.5, “Flow Control Functions”. The
          CASE statement cannot have an
          ELSE NULL clause, and it is terminated with
          END CASE instead of END.
        For the first syntax, case_value is
        an expression. This value is compared to the
        when_value expression in each
        WHEN clause until one of them is equal. When
        an equal when_value is found, the
        corresponding THEN clause
        statement_list executes. If no
        when_value is equal, the
        ELSE clause
        statement_list executes, if there is
        one.
      
        This syntax cannot be used to test for equality with
        NULL because NULL = NULL
        is false. See Section 5.3.4.6, “Working with NULL Values”.
      
        For the second syntax, each WHEN clause
        search_condition expression is
        evaluated until one is true, at which point its corresponding
        THEN clause
        statement_list executes. If no
        search_condition is equal, the
        ELSE clause
        statement_list executes, if there is
        one.
      
        If no when_value or
        search_condition matches the value
        tested and the CASE statement
        contains no ELSE clause, a Case
        not found for CASE statement error results.
      
        Each statement_list consists of one
        or more SQL statements; an empty
        statement_list is not permitted.
      
        To handle situations where no value is matched by any
        WHEN clause, use an ELSE
        containing an empty
        BEGIN ...
        END block, as shown in this example. (The indentation
        used here in the ELSE clause is for purposes
        of clarity only, and is not otherwise significant.)
      
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;
  |