NVL2 nos permite devolver un valor u otro dependiendo de si un dato es NULL o no.
Es parecida a NVL, pero con una diferencia importante: cuando la expresión no es NULL, NVL2 no devuelve la expresión original, sino el segundo valor que indiquemos.
Sintaxis
NVL2(expr, valor_si_no_null, valor_si_null)
- Si
exprno esNULL, Oracle devuelvevalor_si_no_null. - Si
expresNULL, Oracle devuelvevalor_si_null.
Ejemplo
Supongamos una lista de usuarios donde algunos tienen informado un deporte favorito y otros no:
WITH usuarios (nombre, deporte_favorito) AS (
SELECT 'Ana', 'Tenis' FROM dual UNION ALL
SELECT 'Luis', NULL FROM dual
)
SELECT nombre,
NVL2(
deporte_favorito,
'Tiene deporte favorito',
'No tiene deporte favorito'
) AS estado
FROM usuarios
ORDER BY nombre;
Resultado:
NOMBRE ESTADO ------ ------------------------- Ana Tiene deporte favorito Luis No tiene deporte favorito
En este caso no queremos mostrar el deporte concreto. Solo queremos saber si el dato existe o no.
Diferencia rápida con NVL
NVL sirve para reemplazar un NULL por otro valor:
NVL(deporte_favorito, 'Sin informar')
NVL2 sirve para devolver dos resultados alternativos:
NVL2(deporte_favorito, 'Informado', 'Sin informar')
Nota sobre tipos de datos
Los valores devueltos por el segundo y tercer parámetro deben ser compatibles. En reportes de texto, lo más sencillo es devolver siempre cadenas de caracteres.
