Die CASE-Anweisung verwendet in WHEN-Klauseln definierte Regeln für die Auswahl einer Gruppe von auszuführenden Anweisungen.
Für die CASE-Anweisung gibt es zwei Formen: die einfache Form und die Suche-Form.
Im einfachen Format wird der Hauptausdruck zuerst ausgewertet. Alle Ausdrücke in der WHEN-Klausel werden ausgewertet, bis das Ergebnis dem Ergebnis des Hauptausdrucks entspricht. Anschließend werden die Anweisungen in der WHEN-Klausel ausgeführt. Wenn keine Übereinstimmung gefunden werden kann und die optionale ELSE-Klausel vorhanden ist, werden die Anweisungen in der ELSE-Klausel ausgeführt. Bei den Testwerten muss es sich nicht um Literale handeln. Die einzige Voraussetzung ist, dass der Hauptausdruck und die Ausdrücke in der WHEN-Klausel Werte ergeben, deren Typen einen Vergleich ermöglichen.
In der Suche-Form wird jeder Ausdruck in der WHEN-Klausel ausgewertet, bis ein Ausdruck den Wert 'TRUE' ergibt. Anschließend werden die Anweisungen in der WHEN-Klausel ausgeführt. Wenn keiner der Ausdrücke den Wert 'TRUE' ergibt und die optionale ELSE-Klausel vorhanden ist, werden die Anweisungen in der ELSE-Klausel ausgeführt. Es muss keine Ähnlichkeit zwischen den Ausdrücken in den CASE-Klauseln bestehen. Die einzige Voraussetzung, die erfüllt werden muss, ist, dass alle Werte einen Booleschen Wert ergeben müssen.
In der ESQL-Sprache gibt es sowohl eine CASE-Anweisung als auch eine CASE-Funktion (weitere Informationen zur CASE-Funktion finden Sie im Abschnitt Funktion CASE). Die CASE-Anweisung wählt eine auszuführende Anweisung aus einer Gruppe von Anweisungen aus. Die CASE-Funktion wählt einen auszuwertenden Ausdruck aus einer Gruppe von Ausdrücken aus, und gibt als Wert den Rückgabewert des ausgewählten Ausdrucks zurück.
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;Suche-Form der CASE-Anweisung:
CASE WHEN i <> 0 THEN CALL handleI(i); WHEN j > 1 THEN CALL handleIZeroAndPositiveJ(j); ELSE CALL handleAllOtherCases(j); END CASE;