Diferencia entre NVL y NVL2

NVL y NVL2 son funciones SQL que a menudo se requieren en sentencias SQL, procedimientos SQL o funciones SQL. Esta publicación describe la diferencia entre NVL y NVL2. Con NVL, solo se comprueba la primera expresión. Si no es igual a NULL, se envía el campo. Sin embargo, si se produce un valor NULL aquí, se ejecuta o se envía la segunda expresión.

IF 
   expr1 IS NOT NULL     
THEN expr1 
END IF; 

IF 
   exp1 IS NULL     
THEN expr2 
END IF;

Sin embargo, con NVL2, no es necesario que expr1 se emita. Aquí puede definir qué valor o qué campo se genera.

IF 
   expr1 IS NOT NULL     
THEN expr2
END IF; 

IF 
   expr1 IS NULL     
THEN expr3 
END IF;

NVL2 es funcionalmente idéntico a NVL si se aplica lo siguiente:

NVL(expr1, expr2) = NVL2(expr1, expr1, expr2)

Algunas de las funciones son necesarias para las consultas. Si, por ejemplo, se realiza una consulta IF, puede ocurrir un error sin definir valores NULL. Por ejemplo, con cálculos agregados. ¿Cuál es el resultado de la suma NULL + NULL o undefined + undefined?

NVL en combinación con MAX y MIN

NVL, en combinación con MAX o MIN, también es muy útil para no devolver ninguna fila. Si, por ejemplo, el código tiene un DONDE 1 = 2 integrado, no se devuelven líneas (ni siquiera un valor NULO). Para generar un valor NULO, puede ayudarse con la función MAX o MIN. Esto siempre entrega una línea, incluso si solo tiene un valor NULL. En combinación con una NVL, finalmente puede verificar si hay «líneas de entrega» o «no entrega líneas».

SELECT NVL(MAX(1), 2)
FROM DUAL
WHERE 1=2;

En este caso, el ejemplo anterior devolvería el valor 2. No se devuelven líneas debido a la condición. Sin embargo, MAX (1) no devuelve un valor NULL para ninguna fila. Este valor NULO es interceptado por el NVL y convertido en el número 2.