Vad är Coalesce-funktionen
Koalesceringsfunktion är en användbar funktion i Oracle och den är väldigt användbar när vi vill returnera de första icke-nullvärdena i listan. Denna SQL-handledning ger förklaringar, exempel för Coalesce-funktionen i Oracle och skillnaden mellan Coalesce &NVL
expr1 :Detta returneras om det inte är null
expr2:Detta returneras om det inte är null och det första uttrycket är null
exprn:Detta returneras om det föregående uttrycket är null
Så Coalesce i oracle kommer att returnera det första uttrycket om det inte är null annars kommer det att sammanfoga resten av uttrycket
Viktig punkt
(1) Oracle Database använder kortslutningsutvärdering. Databasen utvärderar varje expr-värde och avgör om det är NULL, snarare än att utvärdera alla expr-värden innan det avgörs om något av dem är NULL.
(2)COALESCE i oracle motsvarar Case-funktion
Så COALESCE (expr1, expr2) motsvarar:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
På samma sätt,
COALESCE (expr1, expr2, …, exprn), för n>=3 motsvarar:
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
Eller detta kan skrivas som
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE COALESCE (expr2, ..., exprn) END
(3) Vanligtvis bör all expr i koalesce-satsen vara av samma datatyp, annars kommer ORA-00932 att returneras.
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
Om alla förekomster av uttryck är numeriska datatyper eller någon icke-numerisk datatyp som implicit kan konverteras till en numerisk datatyp, bestämmer Oracle Database argumentet med den högsta numeriska prioritet, konverterar implicit de återstående argumenten till den datatypen och returnerar den datatypen.
Hur man använder Coalesce-funktionen
SQL> select coalesce(1,2,3) from dual; COALESCE(1,2,3) --------------- 1 SQL> SELECT COALESCE(null, null, null, 'X', 'Y'); COALESCE(...) --------------- X
Koalesceringsexempel
Anta att vi har en anställd orakeltabell som består av adress1, adress2 och adress3 och vi kan vilja skriva ut den första icke-null-adressen för de anställda från tabellen i prioritetsordning adress1> adress2> adress3
select emp_name, COALESCE(address1,address2,address3) from employee;
Skillnaden mellan Coalesce och NVL-funktion
- Koalesce är generalisering av NVL-funktion. NVL-funktionen kan användas för två uttryck, medan sammansmältning kan användas för många
- I fallet med två uttryck är de samma men implementeringen är olika. Oracle utvärderar både uttrycket i fallet med NVL medan det bara utvärderar det första uttrycket i fallet med sammansmältning. Så om det andra uttrycket har fel, kommer NVL att ge fel medan det inte kommer att smälta samman.
- Coalesce är ANSI-standard medan NVL är Oracle-specifik
Relaterade artiklar
Oracle SQL handledning
NULLIF-funktion i Oracle
NVL-funktion i Oracle
Oracle LISTAGG-funktion
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functions023.htm#SQLRF00617