Функция COALESCE

Статьи про Oracle -> Программирование

Функция COALESCE

v:1.0 07.08.2011
Петрелевич Сергей
Источник информации: Oracle® Database SQL Language Reference

Синтаксис

Синтаксис функции COALESCE

Описание

Функция COALESCE возвращает первое не-NULL выражение(expr) в списке выражений (expr list). Необходимо задать как минимум два выражения. Если значения всех выражений NULL, то и функция вернет NULL.

База данных Oracle использует short-circuit evaluation (короткий путь вычисления выражения), т.е. выражения будут вычисляться до тех пор, пока одно из них не окажется не NULL.

Если тип данных всех выражений (expr) - число или результаты всех выражений неявно можно причести к числовому типу, то такое приведение будет выполнено с максимально возможной точностью.

Дополнительная информация:
Table 2-10, "Implicit Type Conversion Matrix" информация о неявном приведении типов и
"Numeric Precedence" информация о точности числового типа.

Функция NVL - это частный случай COALESCE.

В ряде случаев Вы можете использовать COALESCE вместо CASE-выражения. Например,

COALESCE (expr1, expr2)

Это эквивалентно:

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END

Другой случай,

COALESCE (expr1, expr2, ..., exprn), для n>=3

эквивалентно:

CASE WHEN expr1 IS NOT NULL THEN expr1 
   ELSE COALESCE (expr2, ..., exprn) END

Дополнительная информация:
NVL и "CASE Expressions"

Примеры

В этом примере используется таблица предопределенной тестовой схемы oe.product_information, информация о товарах и ценах. Запрос возвращает цену товара со скидкой 10%, если цена не определена, то берется минимальная цена (min_price), если и это поле не определено, то подставляется константа "5":

SELECT product_id, list_price, min_price,
   COALESCE(0.9*list_price, min_price, 5) "Sale"
   FROM product_information
   WHERE supplier_id = 102050
   ORDER BY product_id, list_price, min_price, "Sale";

PRODUCT_ID LIST_PRICE  MIN_PRICE       Sale
---------- ---------- ---------- ----------
      1769         48                  43.2
      1770                    73         73
      2378        305        247      274.5
      2382        850        731        765
      3355                                5

Метки: SQL  

Комментарии.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.