Oracle
 sql >> Database >  >> RDS >> Oracle

Funzione NVL2() in Oracle

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"