Wat is de Coalesce-functie
Coalesce-functie is een nuttige functie in oracle en het is erg handig als we de eerste niet-null-waarden in de lijst willen retourneren. Deze SQL-tutorial biedt uitleg, voorbeelden voor Coalesce Function in Oracle en het verschil tussen Coalesce &NVL
expr1 :Dit wordt geretourneerd als het niet null is
expr2:Dit wordt geretourneerd als het niet null is en de eerste expressie is null
exprn:Dit wordt geretourneerd als de voorgaande expressie null is
Dus samenvoegen in orakel zal de eerste uitdrukking retourneren als deze niet nul is, anders zal het de rest van de uitdrukking samenvoegen
Belangrijk punt
(1) Oracle Database maakt gebruik van kortsluitingsevaluatie. De database evalueert elke expr-waarde en bepaalt of deze NULL is, in plaats van alle expr-waarden te evalueren voordat wordt bepaald of een van deze NULL is.
(2)COALESCE in orakel is gelijk aan Case-functie
Dus COALESCE (expr1, expr2) is gelijk aan:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Evenzo,
COALESCE (expr1, expr2, …, exprn), voor n>=3 is gelijk aan:
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
Of dit kan worden geschreven als
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE COALESCE (expr2, ..., exprn) END
(3) Gewoonlijk moeten alle expr van de coalesce-verklaring van hetzelfde datatype zijn, anders wordt ORA-00932 geretourneerd.
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
Als alle gevallen van expressie een numeriek gegevenstype zijn of een niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar een numeriek gegevenstype, bepaalt Oracle Database het argument met de hoogste numerieke prioriteit, converteert het impliciet de resterende argumenten naar dat gegevenstype en retourneert dat gegevenstype.
De Coalesce-functie gebruiken
SQL> select coalesce(1,2,3) from dual; COALESCE(1,2,3) --------------- 1 SQL> SELECT COALESCE(null, null, null, 'X', 'Y'); COALESCE(...) --------------- X
Voorbeelden samenvoegen
Stel dat we een werknemers-orakeltabel hebben die bestaat uit adres1, adres2 en adres3 en we willen het eerste niet-null-adres van de werknemers uit de tabel afdrukken in volgorde van prioriteit adres1> adres2> adres3
select emp_name, COALESCE(address1,address2,address3) from employee;
Verschil tussen Coalesce en NVL-functie
- Coalesce is een generalisatie van de NVL-functie. De NVL-functie kan voor twee uitdrukkingen worden gebruikt, terwijl samenvoegen kan worden gebruikt voor Veel
- In het geval van twee expressies, zijn ze hetzelfde, maar de implementatie is anders. Oracle evalueert zowel de expressie in het geval van NVL, terwijl het alleen de eerste expressie evalueert in het geval van samenvloeien. Dus als de tweede expressie fouten bevat, zal NVL een fout genereren terwijl samensmelten dat niet zal doen.
- Coalesce is ANSI-standaard, terwijl NVL Oracle-specifiek is
Gerelateerde artikelen
Oracle Sql-zelfstudie
NULLIF-functie in Oracle
NVL-functie in Oracle
Oracle LISTAGG-functie
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functies023.htm#SQLRF00617