La función NVL2 de Oracle

Imagen destacada para la función NVL2 de Oracle en AT

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 expr no es NULL, Oracle devuelve valor_si_no_null.
  • Si expr es NULL, Oracle devuelve valor_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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *