Hvad er sammensmeltningsfunktionen
Koalesceringsfunktion er en nyttig funktion i oracle, og den er meget nyttig, når vi ønsker at returnere de første ikke-nullværdier på listen. Denne SQL-tutorial giver forklaringer, eksempler på Coalesce-funktionen i Oracle og forskellen mellem Coalesce &NVL
udtr1 :Dette returneres hvis det ikke er null
expr2:Dette returneres hvis det ikke er null og det første udtryk er null
exprn:Dette returneres hvis det foregående udtryk er null
Så Coalesce i oracle returnerer det første udtryk, hvis det ikke er null, ellers vil det sammensmelte resten af udtrykket
Vigtigt punkt
(1) Oracle Database bruger kortslutningsevaluering. Databasen evaluerer hver expr-værdi og bestemmer, om den er NULL, i stedet for at evaluere alle expr-værdierne, før den bestemmer, om nogen af dem er NULL.
(2)COALESCE i oracle svarer til Case-funktion
Så COALESCE (udtr1, udtr2) svarer til:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Tilsvarende
COALESCE (udtr1, udtr2, …, udtrn), for n>=3 svarer til:
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 dette kan skrives som
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE COALESCE (expr2, ..., exprn) END
(3) Normalt bør al udtrykket i sammensmeltningserklæringen være af samme datatype, ellers vil ORA-00932 blive returneret.
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
Hvis alle forekomster af udtryk er numeriske datatyper eller en ikke-numerisk datatype, der implicit kan konverteres til en numerisk datatype, så bestemmer Oracle Database argumentet med den højeste numeriske forrang, konverterer implicit de resterende argumenter til den datatype og returnerer denne datatype.
Sådan bruger du 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
Eksempler på sammensmeltning
Antag, at vi har en medarbejder-oracle-tabel bestående af adresse1, adresse2 og adresse3, og vi kan ønske at udskrive den første ikke-nul-adresse på medarbejderne fra tabellen i prioriteret rækkefølge adresse1> adresse2> adresse3
select emp_name, COALESCE(address1,address2,address3) from employee;
Forskellen mellem Coalesce- og NVL-funktion
- Koalescer er generalisering af NVL-funktion. NVL-funktionen kan bruges til to udtryk, mens coalesce kan bruges til mange
- I tilfælde af to udtryk er de ens, men implementeringen er forskellig. Oracle evaluerer både udtrykket i tilfælde af NVL, mens det bare evaluerer det første udtryk i tilfælde af sammensmeltning. Så hvis det andet udtryk har fejl, vil NVL give fejl mens det ikke vil smelte sammen.
- Coalesce er ANSI-standard, mens NVL er Oracle-specifik
Relaterede artikler
Oracle Sql tutorial
NULLIF-funktion i Oracle
NVL-funktion i Oracle
Oracle LISTAGG-funktion
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functions023.htm#SQLRF00617