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