sql >> Databasteknik >  >> RDS >> Oracle

Hur man använder Coalesce Function i Oracle

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

  1. 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
  2. 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.
  3. 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


  1. Rethink Flask – En enkel att göra-lista som drivs av Flask och RethinkDB

  2. ABS() Exempel i SQL Server

  3. mysql_num_rows() förväntar sig att parameter 1 är resurs, boolean ges in

  4. Kostnaden för gratis PostgreSQL-reklam