Sentencia CASE en PL/SQL

Esta expresión de control permite evaluar una condición y dependiendo del resultado ejecutar o no una acción, como te habrás dado cuenta esta sentencia es muy similar a los condicionales IF. Si pudiéramos llevar esta estructura de control a un ejemplo de la vida real tendríamos que poner a nuestros padres a evaluar dos posibles casos y dependiendo del resultado de nuestras calificaciones finales llevar a cabo una acción:

En CASO de que la nota final sea igual a 10
   entonces nos comprarán una nueva PlayStation
En CASO de que la nota final sea menor que 5
   entonces estaremos reprobados y castigados todo el verano

En el anterior ejemplo de la vida real hemos evaluado dos posibles casos, pero podemos evaluar tantas condiciones como sean necesarias, pudimos haber creado 10, pero decidimos explicar con solo dos.

Habiendo explicado lo anterior vamos a hacer un verdadero ejemplo con PL/SQL para poder ver su sintaxis y seguiremos con el ejemplo de las calificaciones. Cambia el valor de la variable l_calificacion por cualquier otro valor numérico y observa que sucede.

En nuestro esquema de calificaciones vamos a suponer que las notas están comprendidas del 0 hasta el 100 y evaluaremos siete posibles casos:

  1. Las Calificaciones menores que 0 serán consideradas un error
  2. Las Calificaciones mayores que 100 serán consideradas un error
  3. Las Calificaciones comprendidas en el rango 1 - 49 se considerarán reprobadas
  4. Las Calificaciones en el rango 50 - 60 se considerarán mediocres
  5. Las Calificaciones en el rango 61 - 75 se considerarán regulares
  6. Las Calificaciones en el rango 76 - 90 se considerarán buenas
  7. Las Calificaciones en el rango 91 - 100 se considerarán buenas
DECLARE
   l_calificacion NUMBER(30);
BEGIN
   l_calificacion:= 49;
   CASE
      WHEN l_calificacion < 0 THEN
         DBMS_OUTPUT.PUT_LINE('calificación: '||l_calificacion||' - No puede ser menor o igual a cero(0)');
      WHEN l_calificacion > 100 THEN
         DBMS_OUTPUT.PUT_LINE('calificación: '||l_calificacion||' - No puede ser mayor que 100 ');
      WHEN l_calificacion <= 49 THEN
         DBMS_OUTPUT.PUT_LINE('calificación: '||l_calificacion||' - Está reprobado');
      WHEN l_calificacion <= 60 AND l_calificacion >=50 THEN
         DBMS_OUTPUT.PUT_LINE('calificación: '||l_calificacion||' - Está aprobado pero es mediocre');
      WHEN l_calificacion <= 75 AND l_calificacion >=61 THEN
         DBMS_OUTPUT.PUT_LINE('calificación: '||l_calificacion||' - Está aprobado pero es regular');
      WHEN l_calificacion <= 90 AND l_calificacion >=76 THEN
         DBMS_OUTPUT.PUT_LINE('calificación: '||l_calificacion||' - Está aprobado es buena ');
      WHEN l_calificacion <= 100 AND l_calificacion >=91 THEN
         DBMS_OUTPUT.PUT_LINE('calificación: '||l_calificacion||' - Excelente ');
   END CASE;
END;

Resultado:

calificación: 49 - Está reprobado

Statement processed.