In Oracle Database, il NVL2()
la funzione ci consente di sostituire i valori nulli con un altro valore.
È simile a NVL()
funzione, tranne per il fatto che accetta tre argomenti invece di due. Questo ci consente di specificare un valore diverso da restituire nel caso in cui il primo argomento non sia null.
Sintassi
La sintassi è questa:
NVL2(expr1, expr2, expr3)
Se expr1
non è null, quindi NVL2
restituisce expr2
. Se expr1
è nullo, quindi NVL2
restituisce expr3
.
Esempio
Ecco un esempio da dimostrare:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Risultato:
3
Il primo argomento era null e quindi è stato restituito il terzo argomento.
Ed ecco cosa succede quando il primo argomento non è nullo:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Risultato:
2
Quando i valori di sostituzione sono nulli
Se il secondo o il terzo argomento è nullo, potresti ottenere un risultato nullo.
Esempio:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Risultato:
r1 r2 _________ _________ (null) (null)
Per quanto riguarda la prima riga SET NULL '(null)';
, ho aggiunto questa riga in modo che la mia sessione SQLcl restituisca quel valore ogni volta che il risultato è nullo.
Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null
si verifica come risultato di un SQL SELECT
dichiarazione.
Tuttavia, puoi utilizzare SET NULL
per specificare una stringa diversa da restituire (come ho fatto qui).
Conteggio argomenti non valido
La chiamata della funzione senza passare alcun argomento genera un errore:
SELECT NVL2()
FROM DUAL;
Risultato:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
E anche passare troppi argomenti provoca un errore:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Risultato:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"