Solución error clausula CASE en Oracle
Cuando trabajamos con ORACLE (en el resto de SGBD no ocurre) y la consulta que utilizamos para obtener los datos de nuestro control contiene clausulas «Complejas» como por ejemplo sub selects o clausulas «CASE» en el Group By, en el momento de generar columnas se produce un error.

Problema
Por ejemplo, si tenemos esta consulta a interrogar a una base de datos oracle:
select DEPARTMENT_ID as "IDDepartamento"
, CASE WHEN HIRE_DATE < '01/01/2010' THEN 'veterano' ELSE 'novel' END as "Antiguedad"
, SUM(SALARY) as "Salario"
from EMPLOYEES
GROUP BY DEPARTMENT_ID
, CASE WHEN HIRE_DATE < '01/01/1990' THEN 'veterano' ELSE 'novel' END
podemos apreciar que no hay ningún error de sintaxis y, de hecho, la consulta se ejecuta correctamente, sin embargo cuando pedimos Generar Columnas aparece el siguiente error.

De hecho, el error se produce cuando se intenta generar el esquema de la tabla resultante utilizando las apis de generación de esquema de Oracle.
Solución
La solución a este error pasa simplemente por poner paréntesis en la clausula CASE del SELECT, tal y como se muestra a continuación:
select DEPARTMENT_ID as "IDDepartamento"
, (CASE WHEN HIRE_DATE < '01/01/2010' THEN 'veterano' ELSE 'novel' END) as "Antiguedad"
, SUM(SALARY) as "Salario"
from EMPLOYEES
GROUP BY DEPARTMENT_ID
, (CASE WHEN HIRE_DATE < '01/01/1990' THEN 'veterano' ELSE 'novel' END)
De esta manera tan simple el driver de Oracle es capaz de analizar el esquema resultante y conseguimos solucionar un problema reportado en algunas ocasiones.
Quieres compartir tus impresiones?
Tu dirección de correo no será publicada. Los campos obligatorios se marcan con *