CASE ステートメントは WHEN 文節で定義された規則を使用して、処理するステートメントのブロックを選択します。
CASE ステートメントには単純形式と検索形式の 2 種類の形式があります。
Simple CASE statement >>-CASE--MainExpression-----------------------------------------> .-<----------------------------------. V | >----WHEN--Expression--THEN--Statements-+-----------------------> >--+------------------+--END--CASE----------------------------->< '-ELSE--statements-'
Searched CASE statement .-<----------------------------------. V | >>-CASE----WHEN--Expression--THEN--Statements-+-----------------> >--+------------------+--END--CASE----------------------------->< '-ELSE--statements-'
単純形式の場合、メインの式がまず評価されます。結果がメイン式の結果と等しくなるまで、各 WHEN 文節式が次々に評価されます。次いで、その WHEN 文節のステートメントが処理されます。一致が検出されず、かつオプションの ELSE 節がある場合は、ELSE 節のステートメントが代わりに実行されます。テスト値は、リテラルでなくてもかまいません。唯一の要件は、メイン式と WHEN 文節式が比較可能なタイプへと評価されることです。
検索形式では、各 WHEN 文節式が、TRUE に評価されるまで、次々に評価されます。 次いで、その WHEN 文節のステートメントが実行されます。どの式も TRUE に評価されず、かつオプションの ELSE 節がある場合は、ELSE 節のステートメントが代わりに実行されます。各 CASE 文節の式どうしが類似している必要はありません。唯一の要件は、それらすべてがブール値に評価されることです。
ESQL 言語には CASE ステートメントと CASE 関数の両方があります (CASE 関数の詳細については、CASE 関数を参照してください)。CASE ステートメントは実行するステートメントのセットを 1 つ選びます。CASE 関数は評価する式のセットを 1 つ選び、選んだ式の戻り値をその値として戻します。
CASE size
WHEN minimum + 0 THEN
SET description = 'small';
WHEN minimum + 1 THEN
SET description = 'medium';
WHEN minimum + 2 THEN
SET description = 'large';
CALL handleLargeObject();
ELSE
SET description = 'unknown';
CALL handleError();
END CASE;
検索 CASE ステートメント: CASE
WHEN i <> 0 THEN
CALL handleI(i);
WHEN j> 1 THEN
CALL handleIZeroAndPositiveJ(j);
ELSE
CALL handleAllOtherCases(j);
END CASE;