Dans Oracle Database, le COALESCE()
renvoie la première expression non nulle de la liste d'expressions.
Syntaxe
La syntaxe ressemble à ceci :
COALESCE(expr [, expr ]...)
Au moins deux expressions doivent être transmises.
Exemple
Voici un exemple pour illustrer :
SELECT COALESCE(null, 7)
FROM DUAL;
Résultat :
7
Voici d'autres exemples :
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL;
Résultat :
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Nous pouvons voir que COALESCE()
renvoie null
lorsque tous les arguments sont nuls.
Concernant la première ligne SET NULL 'null';
, j'ai ajouté cela pour que ma session SQLcl renvoie null
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 autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null
doit être retourné.
Exemple de base de données
Supposons que nous lancions la requête suivante :
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Résultat :
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
Nous pouvons voir que plusieurs des lignes sont null
dans le STATE_PROVINCE
colonne.
Voici à nouveau la requête, sauf que cette fois nous utilisons COALESCE()
par rapport au STATE_PROVINCE
colonne :
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Résultat :
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
Nous avons donc utilisé COALESCE()
pour renvoyer N/A
chaque fois qu'une valeur nulle s'est produite.
COALESCE()
vs CASE
Les éléments suivants :
COALESCE(expr1, expr2)
Est équivalent à ceci :
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Nombre d'arguments non valides
L'appel de la fonction sans passer d'arguments entraîne une erreur :
SELECT COALESCE()
FROM DUAL;
Résultat :
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"