В Oracle Database, COALESCE() функцията връща първия ненулев израз в списъка с изрази.
Синтаксис
Синтаксисът е така:
COALESCE(expr [, expr ]...) Трябва да се предадат поне два израза.
Пример
Ето пример за демонстрация:
SELECT COALESCE(null, 7)
FROM DUAL; Резултат:
7
Ето още няколко примера:
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; Резултат:
r1 r2 r3 r4 r5
_____ _____ _____ _____ _______
1 1 3 1 null
Можем да видим, че COALESCE() връща null когато всички аргументи са нулеви.
По отношение на първия ред SET NULL 'null'; , добавих това, така че моята SQLcl сесия връща null когато резултатът е нулев.
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.
Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.
Пример за база данни
Да предположим, че изпълняваме следната заявка:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; Резултат:
LOCATION_ID STATE_PROVINCE
______________ ___________________
1000 null
1100 null
1200 Tokyo Prefecture
1300 null
1400 Texas
1500 California
Можем да видим, че няколко от редовете са null в STATE_PROVINCE колона.
Ето отново заявката, освен че този път използваме COALESCE() срещу STATE_PROVINCE колона:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; Резултат:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A')
______________ _________________________________
1000 N/A
1100 N/A
1200 Tokyo Prefecture
1300 N/A
1400 Texas
1500 California
Затова използвахме COALESCE() за да върнете N/A всеки път, когато се появи нулева стойност.
COALESCE() срещу CASE
Следното:
COALESCE(expr1, expr2) Еквивалентно на това:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END Невалиден брой аргументи
Извикването на функцията без предаване на аргументи води до грешка:
SELECT COALESCE()
FROM DUAL; Резултат:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"