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"