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

Fonction NVL2() dans Oracle

Dans Oracle Database, le NVL2() La fonction nous permet de remplacer les valeurs nulles par une autre valeur.

C'est similaire au NVL() fonction, sauf qu'elle accepte trois arguments au lieu de deux. Cela nous permet de spécifier une valeur différente à retourner dans le cas où le premier argument n'est pas nul.

Syntaxe

La syntaxe ressemble à ceci :

NVL2(expr1, expr2, expr3)

Si expr1 n'est pas nul, alors NVL2 renvoie expr2 . Si expr1 est nul, alors NVL2 renvoie expr3 .

Exemple

Voici un exemple pour illustrer :

SELECT NVL2(null, 2, 3)
FROM DUAL;

Résultat :

3

Le premier argument était nul et le troisième argument a donc été renvoyé.

Et voici ce qui se passe lorsque le premier argument n'est pas nul :

SELECT NVL2(1, 2, 3)
FROM DUAL;

Résultat :

2

Lorsque les valeurs de remplacement sont nulles

Si le deuxième ou le troisième argument est nul, vous pourriez vous retrouver avec un résultat nul.

Exemple :

SET NULL '(null)';
SELECT 
    NVL2(1, null, 3) AS "r1",
    NVL2(null, 2, null) AS "r2"
FROM DUAL;

Résultat :

       r1        r2 
_________ _________ 
   (null)    (null)

Concernant la première ligne SET NULL '(null)'; , j'ai ajouté cette ligne pour que ma session SQLcl renvoie cette valeur chaque fois que le résultat est nul.

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une chaîne différente à renvoyer (comme je l'ai fait ici).

Nombre d'arguments non valides

L'appel de la fonction sans passer d'arguments entraîne une erreur :

SELECT NVL2()
FROM DUAL;

Résultat :

SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"

Et passer trop d'arguments provoque également une erreur :

SELECT NVL2(1, 2, 3, 4)
FROM DUAL;

Résultat :

SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"