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"