Differenza tra NVL e NVL2

NVL e NVL2 sono entrambe funzioni SQL spesso richieste nelle istruzioni SQL, nelle procedure SQL o nelle funzioni SQL. Questo post descrive la differenza tra NVL e NVL2. Con NVL, viene controllata solo la prima espressione. Se questo non è uguale a NULL, viene emesso il campo. Tuttavia, se qui si verifica un valore NULL, la seconda espressione viene eseguita o emessa.

IF 
   expr1 IS NOT NULL     
THEN expr1 
END IF; 

IF 
   exp1 IS NULL     
THEN expr2 
END IF;

Con NVL2, tuttavia, l’espr1 non deve essere necessariamente emesso. Qui puoi definire quale valore o quale campo viene emesso.

IF 
   expr1 IS NOT NULL     
THEN expr2
END IF; 

IF 
   expr1 IS NULL     
THEN expr3 
END IF;

NVL2 è funzionalmente identico a NVL se si applica quanto segue:

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

Alcune delle funzioni sono necessarie per le query. Se, ad esempio, viene eseguita una query IF, può verificarsi un errore senza definire i valori NULL. Ad esempio, con calcoli aggregati. Qual è il risultato della somma NULL + NULL o undefined + undefined?

NVL in combinazione con MAX e MIN

Anche NVL, in combinazione con MAX o MIN, è molto utile per non restituire alcuna riga. Se, ad esempio, il codice ha WHERE 1 = 2 incorporato, non viene restituita nessuna riga (nemmeno un valore NULL). Per generare un valore NULL, puoi aiutarti con la funzione MAX o MIN. Questo fornisce sempre una riga, anche se solo con un valore NULL. In combinazione con un NVL puoi finalmente verificare la presenza di “consegna linee” o “consegna nessuna linea”.

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

In questo caso, l’esempio precedente restituirà il valore 2. Nessuna riga viene restituita a causa della condizione. Tuttavia, MAX (1) non restituisce un valore NULL per nessuna riga. Questo valore NULL viene intercettato dall’NVL e convertito nel numero 2.