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

Fonction COALESCE() dans Oracle

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"