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

Функция

Двухвариантная замена неопределенного значения (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        |