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

Come utilizzare la funzione Coalesce in Oracle

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

  1. Coalesce è la generalizzazione della funzione NVL. La funzione NVL può essere utilizzata per due espressioni, mentre la coalescenza può essere utilizzata per Molte
  2. 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à.
  3. 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