В 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"