In MySQL, the CASE
statement can be used in stored programs to perform a complex conditional construct. It compares a list of conditions and returns a different result depending on which condition (if any) is matched.
The CASE
statement is different to the CASE
operator, in that the CASE
statement is specifically for use in stored programs. Also, there’s a slight difference in the syntax.
Syntax
The CASE
statement can be used in two ways.
Like this:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
Or like this:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Example
Here’s an example of a basic stored procedure with the first CASE
syntax:
DELIMITER |
CREATE PROCEDURE sp_lunch(
IN cuisine VARCHAR(10),
OUT dish VARCHAR(50)
)
BEGIN
CASE cuisine
WHEN 'Thai' THEN SET dish = 'Pad Thai';
WHEN 'Italian' THEN SET dish = 'Pizza';
ELSE SET dish = 'Roast of the Day';
END CASE;
END;
|
This syntax is referred to as the simple CASE
expression. The simple CASE
expression compares an expression to a set of simple expressions to determine the result.
Now when we call that procedure, the output depends on our input:
CALL sp_lunch( 'Thai', @theDish );
SELECT @theDish;
Result:
+----------+ | @theDish | +----------+ | Pad Thai | +----------+
And with different input:
CALL sp_lunch( 'Italian', @theDish );
SELECT @theDish;
Result:
+----------+ | @theDish | +----------+ | Pizza | +----------+
And when we input a value that’s not covered by any of the WHEN
conditions, the ELSE
clause is effected:
CALL sp_lunch( 'Aussie', @theDish );
SELECT @theDish;
Result:
+------------------+ | @theDish | +------------------+ | Roast of the Day | +------------------+
See the MySQL CASE
operator for an example of how the second syntax (the searched CASE
expression) works.
The CASE
Operator
As mentioned, in MySQL there’s a difference between the CASE
statement and the CASE
operator. The CASE
statement is specifically for use in stored programs. Also, the CASE
statement cannot have an ELSE NULL
clause (the CASE
operator can), and it is terminated with END CASE
instead of END
(which is how the CASE
operator is terminated).