Sentencia CASE

La sentencia CASE utiliza las reglas definidas en cláusulas WHEN para seleccionar un bloque de sentencias que se han de procesar.

Hay dos formatos de la sentencia CASE: el sencillo y el buscado.

Sintaxis

En el formato sencillo, la expresión principal se evalúa en primer lugar. Cada expresión de cláusula WHEN se evalúa por turnos hasta que el resultado es igual al de la expresión principal. A continuación, se ejecuta las sentencias de la cláusula WHEN. Si no se encuentra ninguna coincidencia y la cláusula ELSE opcional está presente, se ejecutan las sentencias de la cláusula ELSE en su lugar. No es necesario que los valores de prueba sean literales. El único requisito es que la expresión principal y las expresiones de la cláusula WHEN se evalúen como tipos que se puedan comparar.

En el formato buscado, cada expresión de cláusula WHEN se evalúa por turno hasta que una se evalúa como TRUE. Entonces se ejecutan las sentencias de esa cláusula WHEN. Si ninguna de las expresiones se evalúa como TRUE y la cláusula ELSE opcional está presente, se ejecutan las sentencias de la cláusula ELSE. No tiene por qué haber ninguna similitud entre las expresiones de cada cláusula CASE. El único requisito es que todas se evalúen en un valor booleano.

El lenguaje ESQL tiene una sentencia CASE y una función CASE (consulte el apartado Función CASE para ver detalles de la función CASE). La sentencia CASE elige una entre un conjunto de sentencias para ejecutarla. La función CASE elige una entre un conjunto de expresiones para evaluarla y devuelve como su valor el valor de retorno de la expresión elegida.

Ejemplos

Sentencia CASE sencilla:
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;
Sentencia CASE buscada:
CASE
	WHEN i <> 0 THEN
    CALL handleI(i);
  WHEN j > 1 THEN
    CALL handleIZeroAndPositiveJ(j);
  ELSE
    CALL handleAllOtherCases(j);
END CASE;

Conceptos relacionados
ESQL

Tareas relacionadas
Desarrollo de ESQL

Referencia relacionada
Preferencia de sintaxis
Sentencias ESQL
Función CASE