La función DECODE es una función al estilo IF/ELSE: compara una misma expresión con uno o varios valores.
Es una función clásica de Oracle para resolver condiciones sencillas dentro de una consulta SQL.
Sintaxis básica
DECODE(expr, valor_busqueda, resultado [, resultado_por_defecto])
Si expr coincide con valor_busqueda, Oracle devuelve resultado. Si no coincide, devuelve resultado_por_defecto cuando se ha indicado, o NULL si no existe valor por defecto.
Ejemplo simple:
SELECT DECODE(343, 344, 'Igual', 'No igual') AS resultado FROM dual;
Resultado:
RESULTADO --------- No igual
Varios valores posibles
DECODE puede encadenar varias comparaciones:
SELECT DECODE(
'ORIGINAL',
'COPIA', 'No es copia',
'TRANSCRITO', 'No es transcrito',
'ORIGINAL', 'Es original',
'No es conocido'
) AS resultado
FROM dual;
Resultado:
RESULTADO ---------- Es original
Ejemplo en una consulta
WITH tareas (estado) AS (
SELECT 'P' FROM dual UNION ALL
SELECT 'F' FROM dual UNION ALL
SELECT 'X' FROM dual
)
SELECT estado,
DECODE(
estado,
'P', 'Pendiente',
'F', 'Finalizada',
'Desconocido'
) AS descripcion
FROM tareas
ORDER BY estado;
Resultado:
ESTADO DESCRIPCION ------ ----------- F Finalizada P Pendiente X Desconocido
Cuándo usar DECODE
DECODE es útil para condiciones simples y código Oracle antiguo. Para condiciones más largas o más legibles, normalmente conviene usar CASE, que es más claro y estándar SQL.
