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.
Con NVL2, tuttavia, l’espr1 non deve essere necessariamente emesso. Qui puoi definire quale valore o quale campo viene emesso.
NVL2 è funzionalmente identico a NVL se si applica quanto segue:
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.