I Oracle Database er COALESCE()
funktion returnerer det første ikke-nul udtryk udtrykslisten.
Syntaks
Syntaksen ser sådan ud:
COALESCE(expr [, expr ]...)
Mindst to udtryk skal bestå.
Eksempel
Her er et eksempel til demonstration:
SELECT COALESCE(null, 7)
FROM DUAL;
Resultat:
7
Her er nogle flere eksempler:
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;
Resultat:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Vi kan se, at COALESCE()
returnerer null
når alle argumenter er nul.
Angående den første linje SET NULL 'null';
, jeg tilføjede det, så min SQLcl-session returnerer null
når resultatet er nul.
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Databaseeksempel
Antag, at vi kører følgende forespørgsel:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultat:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 Californien
Vi kan se, at flere af rækkerne er null
i STATE_PROVINCE
kolonne.
Her er forespørgslen igen, bortset fra at denne gang bruger vi COALESCE()
mod STATE_PROVINCE
kolonne:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultat:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') _________________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 Californien
Så vi brugte COALESCE()
for at returnere N/A
hver gang der opstod en nulværdi.
COALESCE()
vs CASE
Følgende:
COALESCE(expr1, expr2)
Svarer til dette:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Ugyldigt antal argumenter
Kaldning af funktionen uden at sende nogen argumenter resulterer i en fejl:
SELECT COALESCE()
FROM DUAL;
Resultat:
SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter til funktion"