Búsquedas

viernes, 21 de septiembre de 2012

Uso de CASE en BBDD Oracle

En el trabajo se me dio la necesidad de en una consulta poner en función del valor de unas columnas un dato u otro (no los valores que contienen dichas columnas), para ello, tras investigar por la red descubrí el comando CASE, para mi caso en Oracle ya que es el gestor que usamos normalmente en nuestros proyectos.
Esta expresión usada en sentencias de consulta, hace las funciones de un IF-THEN-ELSE de programación de toda la vida, es decir, Oracle comprueba cada condición empezando por la primera de izquierda a derecha. Cuando una se cumple, la expresión devuelve el valor expuesto tras el "THEN" correspondiente. Si ninguna de las condiciones se satisface se devolvería lo expuesto en el "ELSE" (aunque esta parte no es obligatoria), en caso de no existir devolvería "NULL".
La sintaxis básica de CASE sería:

case when  then 
when  then 
...
else 
end 
 
Y un ejemplo podría ser:

- Devolver las categorías basadas en el salario de los empleados

select sal, case when sal < 2000 then 'category 1' 
                 when sal < 3000 then 'category 2' 
                 when sal < 4000 then 'category 3' 
                 else 'category 4' 
            end 
from emp; 

- Evaluar la edad de un empleado:

SELECT CASE lin_edad
When 25 Then lin_porcentaje:= 10;
When 30 Then lin_porcentaje:= 15;
When 35 Then lin_porcentaje:= 17;
Else lin_porcentaje:= 5;
END CASE;

- Veamos ahora el mismo ejemplo anterior pero aplicando la segunda forma del CASE, revisemos como se hace:

/* PL-SQL Packages en Oracle */
CASE
When lin_edad <= 25 Then lin_porcentaje:= 10;
When lin_edad >= 30 Then lin_porcentaje:= 15;
When lin_edad >= 35 and lin_edad <= 40 Then lin_porcentaje:= 17;
Else lin_porcentaje:= 5;
END CASE;

No hay comentarios: