sql >> Databáze >  >> RDS >> Oracle

Jak používat funkci Coalesce v Oracle

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 NUMBER 

Pokud 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(...)---------------X

Pří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

  1. Coalesce je zobecnění funkce NVL. Funkci NVL lze použít pro dva výrazy, zatímco sloučení lze použít pro mnoho
  2. 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.
  3. 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


  1. Jádro Entity Framework – Obsahuje Rozlišují se malá a velká písmena?

  2. Jak vytvořit formát json pomocí group-concat mysql?

  3. Příklady LOG() v SQL Server

  4. Jednoduchá parametrizace a triviální plány — 3. část