W bazie danych Oracle COALESCE()
funkcja zwraca pierwsze niezerowe wyrażenie z listy wyrażeń.
Składnia
Składnia wygląda tak:
COALESCE(expr [, expr ]...)
Należy przekazać co najmniej dwa wyrażenia.
Przykład
Oto przykład do zademonstrowania:
SELECT COALESCE(null, 7)
FROM DUAL;
Wynik:
7
Oto kilka przykładów:
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;
Wynik:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Widzimy, że COALESCE()
zwraca null
gdy wszystkie argumenty są puste.
Odnośnie pierwszej linii SET NULL 'null';
, dodałem to, aby moja sesja SQLcl zwracała null
ilekroć wynik jest pusty.
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Przykład bazy danych
Załóżmy, że uruchamiamy następujące zapytanie:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Wynik:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
Widzimy, że kilka wierszy jest null
w STATE_PROVINCE
kolumna.
Oto zapytanie ponownie, ale tym razem używamy COALESCE()
przeciwko STATE_PROVINCE
kolumna:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Wynik:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
Więc użyliśmy COALESCE()
aby zwrócić N/A
za każdym razem, gdy wystąpiła wartość pusta.
COALESCE()
vs CASE
Następujące:
COALESCE(expr1, expr2)
Jest odpowiednikiem tego:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Nieprawidłowa liczba argumentów
Wywołanie funkcji bez przekazywania jakichkolwiek argumentów skutkuje błędem:
SELECT COALESCE()
FROM DUAL;
Wynik:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"