A instrução CASE utiliza regras definidas em cláusulas WHEN para selecionar um bloco de instruções para processar.
Há duas formas de instrução CASE: a forma simples e a forma pesquisada.
Instrução CASE simples >>-CASE--MainExpression-----------------------------------------> .-<----------------------------------. V | >----WHEN--Expression--THEN--Statements-+-----------------------> >--+------------------+--END--CASE----------------------------->< '-ELSE--statements-'
Instrução CASE pesquisada .-<----------------------------------. V | >>-CASE----WHEN--Expression--THEN--Statements-+-----------------> >--+------------------+--END--CASE----------------------------->< '-ELSE--statements-'
Na forma simples, a expressão principal é avaliada primeiro. Cada expressão da cláusula WHEN é avaliada sucessivamente até o resultado ser igual ao da expressão principal. As instruções dessa cláusula WHEN são então processadas. Se nenhuma correspondência for encontrada e a cláusula ELSE opcional estiver presente, as instruções da cláusula ELSE são executadas em seu lugar. Os valores de teste não precisam ser literais. A única exigência é que a expressão principal e as expressões da cláusula WHEN avaliem tipos que podem ser comparados.
Na forma pesquisada, cada expressão da cláusula WHEN é avaliada sucessivamente até uma avaliar para TRUE. As instruções dessa cláusula WHEN são executadas em seguida. Se nenhuma das expressões avaliar para TRUE e a cláusula ELSE opcional estiver presente, as instruções da cláusula ELSE são executadas. Não precisa haver qualquer semelhança entre as expressões em cada cláusula CASE. O único requisito é que todas sejam avaliadas como um valor Booleano.
A linguagem ESQL possui uma instrução CASE e uma função CASE (consulte Função CASE para obter detalhes da função CASE). A instrução CASE escolhe uma entre um conjunto de instruções para executar. A função CASE escolhe uma entre um um conjunto de instruções para avaliar e retorna como seu valor o valor de retorno da expressão escolhida.
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;
Instrução CASE pesquisada: CASE
WHEN i <> 0 THEN
CALL handleI(i);
WHEN j > 1 THEN
CALL handleIZeroAndPositiveJ(j);
ELSE
CALL handleAllOtherCases(j);
END CASE;