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

Функция

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

Спецификация
 
<​выражение1​>::=
<​выражение2​>::=
<​выражение3​>::=
Общие правила
  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        |