Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction NVL2 dans Oracle

Ce tutoriel SQL fournit des explications, des exemples pour la fonction NVL2 dans Oracle

La fonction NVL2 est une fonction d'imbrication. Elle examine la première impression, si la première impression n'est pas nulle, la fonction NVL2 renvoie la deuxième expression. si la première impression est nulle, elle renvoie la troisième expression.

expr1 :ce sont les valeurs ou l'expression source qui peuvent contenir null. Vous pouvez fournir le nom de la colonne, fonction sur le nom de la colonne
expr2 :C'est la valeur de l'expression qui est retournée si expr1 n'est pas null
expr3 :C'est la valeur de l'expression qui est retournée si expr1 est nulle

L'argument expr1 peut avoir n'importe quel type de données. Les arguments expr2 et expr3 peuvent avoir n'importe quel type de données sauf 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

Si les types de données de expr2 et expr3 sont différents :

Si expr2 est une donnée textuelle, Oracle Database convertit expr3 dans le type de données de expr2 avant de les comparer, sauf si expr3 est une constante nulle. Dans ce cas, une conversion de type de données n'est pas nécessaire. Oracle renvoie VARCHAR2 dans le jeu de caractères de expr2.

Si expr2 est numérique, alors Oracle détermine quel argument a la priorité numérique la plus élevée, convertit implicitement l'autre argument en ce type de données et renvoie ce type de données.

Le type de données du type de retour est toujours le même que le type de données de expr2 sauf si expr2 est une donnée de type caractère, auquel cas la valeur de retour est toujours 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

Utilisation 

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

Articles connexes

Fonctions à ligne unique dans Sql
Fonction NULLIF dans Oracle
Instruction de mise à jour dans Oracle
Fonction Coalesce dans Oracle
Fonction Oracle LISTAGG
Fonctions de date Oracle