Oracle
 sql >> Database >  >> RDS >> Oracle

COALESCE() Funzione in Oracle

In Oracle Database, il COALESCE() La funzione restituisce la prima espressione non nulla nell'elenco delle espressioni.

Sintassi

La sintassi è questa:

COALESCE(expr [, expr ]...)

Devono essere passate almeno due espressioni.

Esempio

Ecco un esempio da dimostrare:

SELECT COALESCE(null, 7)
FROM DUAL;

Risultato:

7

Ecco altri esempi:

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;

Risultato:

   r1    r2    r3    r4      r5 
_____ _____ _____ _____ _______ 
    1     1     3     1 null   

Possiamo vedere che COALESCE() restituisce null quando tutti gli argomenti sono nulli.

Per quanto riguarda la prima riga SET NULL 'null'; , l'ho aggiunto in modo che la mia sessione SQLcl restituisca null ogni volta che il risultato è nullo.

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Esempio di database

Supponiamo di eseguire la seguente query:

SET NULL 'null';
SELECT 
    LOCATION_ID,
    STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;

Risultato:

   LOCATION_ID      STATE_PROVINCE 
______________ ___________________ 
          1000 null                
          1100 null                
          1200 Tokyo Prefecture    
          1300 null                
          1400 Texas               
          1500 California          

Possiamo vedere che molte delle righe sono null nel STATE_PROVINCE colonna.

Ecco di nuovo la query, tranne per il fatto che questa volta utilizziamo COALESCE() contro STATE_PROVINCE colonna:

SELECT 
    LOCATION_ID,
    COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;

Risultato:

   LOCATION_ID    COALESCE(STATE_PROVINCE,'N/A') 
______________ _________________________________ 
          1000 N/A                               
          1100 N/A                               
          1200 Tokyo Prefecture                  
          1300 N/A                               
          1400 Texas                             
          1500 California                        

Quindi abbiamo usato COALESCE() per restituire N/A ogni volta che si verifica un valore nullo.

COALESCE() rispetto a CASE

Il seguente:

COALESCE(expr1, expr2)

Equivale a questo:

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END

Conteggio argomenti non valido

La chiamata della funzione senza passare alcun argomento genera un errore:

SELECT COALESCE()
FROM DUAL;

Risultato:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"