Die CASE-Anweisung (Bedingungsanweisung) verwendet in WHEN-Klauseln definierte Regeln zur Auswahl eines zu verarbeitenden Anweisungsblocks.
Es gibt zwei Formen der CASE-Anweisung: die einfache Form und die Suchform.
In der einfachen Form wird zuerst der Hauptausdruck ausgewertet. Alle WHEN-Klauselausdrücke werden der Reihe nach ausgewertet, bis das Ergebnis mit dem Ergebnis des Hauptausdrucks übereinstimmt. Danach werden die Anweisungen dieser WHEN-Klausel ausgeführt. Falls keine Übereinstimmung gefunden wird und die optionale ELSE-Klausel vorhanden ist, werden stattdessen die Anweisungen der ELSE-Klausel ausgeführt. Die Testwerte müssen keine Literale sein. Die einzige Voraussetzung ist, dass der Hauptausdruck und die WHEN-Klauselausdrücke Typen ergeben, die verglichen werden können.
In der Suchform werden alle WHEN-Klauselausdrücke der Reihe nach ausgewertet, bis ein Ausdruck TRUE ergibt. Danach werden die Anweisungen dieser WHEN-Klausel ausgeführt. Falls keiner der Ausdrücke TRUE ergibt und die optionale ELSE-Klausel vorhanden ist, werden die Anweisungen der ELSE-Klausel ausgeführt. Es muss keine Ähnlichkeit zwischen den Ausdrücken in den einzelnen CASE-Klauseln vorhanden sein. Die einzige Voraussetzung ist, dass sie alle einen Booleschen Wert ergeben.
In der ESQL-Sprache gibt es sowohl eine CASE-Anweisung als auch eine CASE-Funktion (weitere Informationen zur CASE-Funktion finden Sie im Abschnitt CASE-Funktion). Die CASE-Anweisung wählt aus einer Gruppe von Anweisungen eine auszuführende Anweisung aus. Die CASE-Funktion wählt aus einer Gruppe von Ausdrücken einen auszuwertenden Ausdruck aus, und gibt als Wert den Rückgabewert des gewä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;CASE-Suchanweisung:
CASE WHEN i <> 0 THEN CALL handleI(i); WHEN j > 1 THEN CALL handleIZeroAndPositiveJ(j); ELSE CALL handleAllOtherCases(j); END CASE;