sql >> Database teknologi >  >> RDS >> Oracle

Sådan bruger du Coalesce-funktionen i Oracle

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

  1. Koalescer er generalisering af NVL-funktion. NVL-funktionen kan bruges til to udtryk, mens coalesce kan bruges til mange
  2. 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.
  3. 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


  1. Hvordan får jeg vist det fulde indhold af en tekst- eller varchar(MAX)-kolonne i SQL Server 2008 Management Studio?

  2. Sådan vælger du fra MySQL, hvor tabelnavnet er Variabelt

  3. Hvordan kopierer man data fra en tabel til en anden ny tabel i MySQL?

  4. Sådan installeres MySQL med phpMyAdmin på Ubuntu 12.04