In Oracle Database, de COALESCE()
functie retourneert de eerste niet-null-uitdrukking in de lijst met uitdrukkingen.
Syntaxis
De syntaxis gaat als volgt:
COALESCE(expr [, expr ]...)
Er moeten ten minste twee uitdrukkingen worden doorgegeven.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT COALESCE(null, 7)
FROM DUAL;
Resultaat:
7
Hier zijn nog enkele voorbeelden:
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL;
Resultaat:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
We kunnen zien dat COALESCE()
retourneert null
wanneer alle argumenten nul zijn.
Met betrekking tot de eerste regel SET NULL 'null';
, ik heb dat toegevoegd zodat mijn SQLcl-sessie null
returns retourneert wanneer het resultaat nul is.
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Databasevoorbeeld
Stel dat we de volgende query uitvoeren:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultaat:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
We kunnen zien dat verschillende rijen null
. zijn in de STATE_PROVINCE
kolom.
Hier is de vraag opnieuw, maar deze keer gebruiken we COALESCE()
tegen de STATE_PROVINCE
kolom:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultaat:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
Dus gebruikten we COALESCE()
om N/A
te retourneren telkens wanneer een null-waarde is opgetreden.
COALESCE()
vs CASE
Het volgende:
COALESCE(expr1, expr2)
Komt overeen met dit:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Ongeldig aantal argumenten
Het aanroepen van de functie zonder het doorgeven van argumenten resulteert in een fout:
SELECT COALESCE()
FROM DUAL;
Resultaat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"