Доступные версии документации

Двухвариантная замена NULL-значения реальным значением

Функция

Двухвариантная замена неопределенного значения (NULL-значения) реальным значением.

Спецификация
 
Общие правила
  1. Функция возвращает значение <выражения2> в случае, если <выражение1> не является NULL-значением, иначе возвращает значение <выражения3>.

  2. Функция эквивалентна конструкции СУБД ЛИНТЕР:

    CASE WHEN <выражение1> IS NOT NULL
    THEN <выражение2> ELSE <выражение3> END;
  3. Типы данных <выражения1>, <выражения2>, <выражения3> должны быть идентичны или приводимыми. При приведении типов данных по умолчанию (без конструкции CAST…) второй и третий аргументы приводятся к типу данных первого аргумента.

  4. Аргументы могут быть заданы <SQL-параметром>, который должен содержать спецификацию типа данных параметра.

    select 'Скидка '+ nvl2(? (char(5)), '10%', 'не предоставляется');
    500
    |Скидка 10%               |
    
    select 'Скидка '+ nvl2(? (char(5)), '10%', 'Не предоставляется');
    NULL
    |Скидка не предоставляется|
Пример
create or replace table tst (i int);
insert into tst values (1), (null), (4), (10);

Эти запросы эквивалентны:

select case when i is not null
              then cast i*100 as char 
            else 'Неопределено' 
       end 
  from tst;

select nvl2(i,cast i*100 as char, 'Неопределено') from tst;
|100         |
|Неопределено|
|400         |
|1000        |
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter