Cos'è la funzione Coalesce
Funzione di unione è una funzione utile in Oracle ed è molto utile quando vogliamo restituire i primi valori non nulli nell'elenco. Questo tutorial SQL fornisce spiegazioni, esempi per Coalesce Function in Oracle e la differenza tra Coalesce e NVL
espr1 :Viene restituito se non è null
expr2:Viene restituito se non è null e la prima espressione è null
exprn:Viene restituito se l'espressione precedente è null
Quindi Coalesce in oracle restituirà la prima espressione se non è nulla altrimenti farà il coalescente il resto dell'espressione
Punto importante
(1) Oracle Database utilizza la valutazione del cortocircuito. Il database valuta ogni valore expr e determina se è NULL, invece di valutare tutti i valori expr prima di determinare se uno di essi è NULL.
(2)COALESCE in Oracle è equivalente alla funzione Case
Quindi COALESCE (espr1, espr2) equivale a:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Allo stesso modo,
COALESCE (espr1, espr2, …, esprn), per n>=3 equivale a:
CASE WHEN expr1 IS NOT NULL THEN expr1 WHEN expr2 IS NOT NULL THEN expr2 WHEN expr3 IS NOT NULL THEN expr3 WHEN exprn IS NOT NULL THEN exprn END
Oppure può essere scritto come
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE COALESCE (expr2, ..., exprn) END
(3) Di solito tutte le espr dell'istruzione coalesce dovrebbero essere dello stesso tipo di dati, altrimenti verrà restituito ORA-00932.
SQL> select coalesce('a',1,2) from dual; select coalesce('a',1,2) from dual * ERROR at line 1: ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
Se tutte le occorrenze di expression sono tipo di dati numerico o qualsiasi tipo di dati non numerico che può essere convertito in modo implicito in un tipo di dati numerico, Oracle Database determina l'argomento con la precedenza numerica più alta, converte implicitamente gli argomenti rimanenti in quel tipo di dati e restituisce quel tipo di dati.
Come utilizzare la funzione Coalesce
SQL> select coalesce(1,2,3) from dual; COALESCE(1,2,3) --------------- 1 SQL> SELECT COALESCE(null, null, null, 'X', 'Y'); COALESCE(...) --------------- X
Esempi di unione
Supponiamo di avere una tabella Oracle dipendente composta da indirizzo1, indirizzo2 e indirizzo3 e possiamo voler stampare il primo indirizzo non nullo dei dipendenti dalla tabella in ordine di priorità indirizzo1> indirizzo2> indirizzo3
select emp_name, COALESCE(address1,address2,address3) from employee;
Differenza tra la funzione Coalesce e NVL
- Coalesce è la generalizzazione della funzione NVL. La funzione NVL può essere utilizzata per due espressioni, mentre la coalescenza può essere utilizzata per Molte
- In caso di due espressioni, sono uguali ma l'implementazione è diversa. Oracle valuta entrambe le espressioni in caso di NVL mentre valuta solo la prima espressione in caso di coalesce. Quindi, se la seconda espressione ha errori, NVL genererà un errore mentre la fusione non lo farà.
- Coalesce è lo standard ANSI mentre NVL è specifico per Oracle
Articoli correlati
Tutorial Oracle Sql
Funzione NULLIF in Oracle
Funzione NVL in Oracle
Funzione Oracle LISTAGG
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functions023.htm#SQLRF00617