V databázi Oracle je to COALESCE()
funkce vrací první nenulový výraz ze seznamu výrazů.
Syntaxe
Syntaxe vypadá takto:
COALESCE(expr [, expr ]...)
Musí být předány alespoň dva výrazy.
Příklad
Zde je příklad k demonstraci:
SELECT COALESCE(null, 7)
FROM DUAL;
Výsledek:
7
Zde je několik dalších příkladů:
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;
Výsledek:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Vidíme, že COALESCE()
vrátí null
když jsou všechny argumenty null.
Ohledně prvního řádku SET NULL 'null';
, přidal jsem to, aby moje relace SQLcl vrátila null
vždy, když je výsledek nulový.
Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null
dochází v důsledku SQL SELECT
prohlášení.
Můžete však použít SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null
by měl být vrácen.
Příklad databáze
Předpokládejme, že spustíme následující dotaz:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Výsledek:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Prefektura Tokio 1300 null 1400 Texas 1500 KalifornieVidíme, že několik řádků je
null
vSTATE_PROVINCE
sloupec.Zde je dotaz znovu, ale tentokrát používáme
COALESCE()
protiSTATE_PROVINCE
sloupec:SELECT LOCATION_ID, COALESCE(STATE_PROVINCE, 'N/A') FROM LOCATIONS ORDER BY LOCATION_ID ASC FETCH FIRST 6 ROWS ONLY;
Výsledek:
COALESCE LOCATION_ID (STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1100 N/A 100 N/A prefekt Kalifornie 1200 N/A 1200 N/A prefekta 1200Použili jsme tedy
COALESCE()
vrátíteN/A
kdykoli dojde k hodnotě null.
COALESCE()
vsCASE
Následující:
COALESCE(expr1, expr2)
Je ekvivalentní tomuto:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Neplatný počet argumentů
Volání funkce bez předání jakýchkoli argumentů má za následek chybu:
SELECT COALESCE() FROM DUAL;
Výsledek:
Chyba SQL:ORA-00938:nedostatek argumentů pro funkci00938. 00000 - "nedostatek argumentů pro funkci"