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

Funzione NVL2 in Oracle

Questo tutorial SQL fornisce spiegazioni ed esempi per la funzione NVL2 in Oracle

La funzione NVL2 è una funzione di annidamento. Esamina la prima impressione, se la prima impressione non è nulla, la funzione NVL2 restituisce la seconda espressione. se la prima impressione è nulla, restituisce la terza espressione.

espr1 :sono i valori o l'espressione di origine che possono contenere null. Puoi fornire il nome della colonna, la funzione sul nome della colonna
espr2 :Questo è il valore dell'espressione che viene restituita se expr1 non è null
expr3 :Questo è il valore dell'espressione che viene restituita se expr1 è null

L'argomento expr1 può avere qualsiasi tipo di dati. Gli argomenti expr2 ed expr3 possono avere qualsiasi tipo di dati tranne LONG.

SQL> select nvl2(user_name,1,2) from apps.fnd_user where rownum < 5;

NVL2(USER_NAME,1,2)
-------------------
1
1
1
1

SQL> select nvl2(end_date,1,2) from apps.fnd_user where rownum < 5;

NVL2(END_DATE,1,2)
------------------
1
2
1
1

Se i tipi di dati di espr2 ed espr3 sono diversi:

Se espr2 sono dati di caratteri, Oracle Database converte espr3 nel tipo di dati di espr2 prima di confrontarli a meno che espr3 non sia una costante nulla. In tal caso, non è necessaria una conversione del tipo di dati. Oracle restituisce VARCHAR2 nel set di caratteri di espr2.

Se expr2 è numerico, Oracle determina quale argomento ha la precedenza numerica più alta, converte implicitamente l'altro argomento in quel tipo di dati e restituisce quel tipo di dati.

Il tipo di dati del tipo restituito è sempre lo stesso del tipo di dati di espr2 a meno che espr2 non sia dati carattere, il cui valore restituito è sempre varchar2

SQL> select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5;
select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5
*
ERROR at line 1:
ORA-01722: invalid number

SQL> select nvl2(end_date,'a',1) from apps.fnd_user where rownum < 5;

N
-
a
1
a
a

Utilizzo 

SELECT last_name, salary, NVL2(commission_pct,
salary + (salary * commission_pct), salary) income
FROM employees WHERE last_name like 'B%'
ORDER BY last_name;

Articoli correlati

Funzioni a riga singola in SQL
Funzione NULLIF in Oracle
Istruzione di aggiornamento in Oracle
Funzione Coalesce in Oracle
Funzione LISTAGG Oracle
Funzioni data Oracle