L'istruzione CASE utilizza le regole definite nella clausola WHEN per selezionare un blocco di istruzioni da eseguire.
Esistono due formati dell'istruzione CASE: il formato semplice ed il formato ricercato.
Nel formato semplice, l'espressione principale viene valutata per prima. Ciascuna espressione della clausola WHEN viene valutata fino a quando il risultato è uguale al risultato dell'espressione principale. Quindi, vengono eseguite le istruzioni di tale clausola WHEN. Se non viene individuata alcuna corrispondenza ed è presente la clausola ELSE, vengono eseguite le istruzioni della clausola ELSE. I valori di test non devono essere letterali. L'unico requisito è che l'espressione principale e le espressioni della clausola WHEN risultano in tipi che possono essere confrontati.
Nel formato ricercato, ciascuna espressione della clausola WHEN viene valutata fino a quando una di esse non fornisce il risultato TRUE. Quindi, vengono eseguite le istruzioni di tale clausola WHEN. Se nessuna delle espressioni è TRUE ed è presente la clausola facoltativa ELSE, vengono eseguite le istruzioni della clausola ELSE. Non è necessario che le espressioni in ciascuna clausola CASE siano simili. L'unico requisito è che tutte abbiano come risultato un valore booleano.
Il linguaggio ESQL dispone di un'istruzione CASE e di una funzione CASE (consultare Funzione CASE per i dettagli relativi alla funzione CASE). L'istruzione CASE seleziona un'istruzione da eseguire da un insieme di istruzioni. La funzione CASE seleziona un'espressione da valutare da un insieme di istruzioni e restituisce come proprio valore il valore restituito dall'espressione selezionata.
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;Istruzione CASE ricercata:
CASE WHEN i <> 0 THEN CALL handleI(i); WHEN j > 1 THEN CALL handleIZeroAndPositiveJ(j); ELSE CALL handleAllOtherCases(j); END CASE;