Co je funkce koalesce
Funkce sloučení je užitečná funkce v oracle a je velmi užitečná, když chceme vrátit první nenulové hodnoty v seznamu. Tento tutoriál SQL poskytuje vysvětlení, příklady pro funkci Coalesce v Oracle a rozdíl mezi Coalesce a NVL
výraz1 :Toto je vráceno, pokud není null
výraz2:Toto je vráceno, pokud není null a první výraz je null
exprn:Je vráceno, pokud je předchozí výraz null
Coalesce v oracle tedy vrátí první výraz, pokud není null, jinak splyne zbytek výrazu
Důležitý bod
(1) Databáze Oracle používá vyhodnocení zkratů. Databáze vyhodnotí každou hodnotu výrazu a určí, zda je NULL, místo aby vyhodnotila všechny hodnoty výrazu, než určí, zda je některá z nich NULL.
(2)COALESCE v oracle je ekvivalentní funkci Case
COALESCE (expr1, expr2) je tedy ekvivalentní:
PŘÍPAD, KDY NENÍ expr1 NULL THEN expr1ELSE expr2 END
Podobně
COALESCE (expr1, expr2, …, exrn), pro n>=3 je ekvivalentní:
PŘÍPAD, KDYŽ expr1 NENÍ NULL TAK expr1WHEN EXPR2 NENÍ NULL THEN EXPR2KDYŽ expr3 NENÍ NULL TAK expr3WHEN NENÍ NULL THEN exprnEND
Nebo to lze napsat jako
PŘÍPAD, KDY NENÍ expr1 NULL TAK EXpr1ELSE COALESCE (expr2, ..., exrn) END
(3) Obvykle by všechny výrazy příkazu sloučení měly mít stejný datový typ, jinak se vrátí ORA-00932.
SQL> select coalesce('a',1,2) from dual;select coalesce('a',1,2) from dual*ERROR na řádku 1:ORA-00932:nekonzistentní datové typy:očekávaný CHAR dostal NUMBERPokud jsou všechny výskyty výrazu numerický datový typ nebo jakýkoli nenumerický datový typ, který lze implicitně převést na numerický datový typ, Oracle Database určí argument s nejvyšší číselnou prioritou, implicitně převede zbývající argumenty na tento datový typ a vrátí tento datový typ.
Jak používat funkci Coalesce
SQL> vyberte coalesce(1,2,3) z dual;COALESCE(1,2,3)---------------1SQL> SELECT COALESCE(null, null, null , 'X', 'Y');COALESCE(...)---------------XPříklady sloučení
Předpokládejme, že máme tabulku věštění zaměstnanců sestávající z adresy1, adresy2 a adresy3 a můžeme chtít vytisknout první nenulovou adresu zaměstnanců z tabulky v pořadí podle priority adresa1> adresa2> adresa3
vyberte emp_name, COALESCE(adresa1,adresa2,adresa3) od zaměstnance;Rozdíl mezi funkcí Coalesce a NVL
- Coalesce je zobecnění funkce NVL. Funkci NVL lze použít pro dva výrazy, zatímco sloučení lze použít pro mnoho
- V případě dvou výrazů jsou stejné, ale implementace se liší. Oracle vyhodnotí oba výrazy v případě NVL, zatímco v případě sloučení vyhodnotí pouze první výraz. Pokud tedy druhý výraz obsahuje chyby, NVL vyvolá chybu zatímco splynutí nebude.
- Coalesce je standard ANSI, zatímco NVL je specifický pro Oracle
Související články
Výukový program Oracle Sql
Funkce NULLIF v Oracle
Funkce NVL v Oracle
Funkce Oracle LISTAGG
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ function023.htm#SQLRF00617