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"