Одновариантная замена NULL-значения реальным значением

Функция

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

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

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

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

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

    select nvl(? (char(5)), null);
    111
    |111  |
    
    select nvl(? (char(5)), '222');
    NULL
    |222  |
  5. Оба < подзапроса > должны содержать одно выбираемое < значимое выражение > и возвращать скалярное значение. Типы данных возвращаемых значений должны быть идентичными или приводимыми друг к другу.

    create or replace table tst2 (id int, ch char(5));
    insert into tst2(id, ch) values (1,'aaa'),(2,'bbb'), (3,NULL);
    
    create or replace table tst1 (id int, val char(5));
    insert into tst1(id, val) values (1,'111'),(2,'bbb'),(3,'aaa');
    
    create or replace table tst (id int, ch char(5));
    insert into tst(id, ch) values (1,'aaa'),(2,'bbb'),(3,NULL), (4,'bbb');
    
    select count(*) from tst
    where ch=nvl((select ch from tst2 where id=2),
    (select val from tst1  where id=2));
    |          2|
    
    select count(*) from tst
     where ch=nvl((select ch from tst2 where id=3),
                  (select val from tst1  where id=3));
    |          1|
Примеры
create table tab1 (i int);
…
select * from tab1;
| 1    |
| NULL |
| 3    |
| 4    |
| NULL |
select avg (i), avg(nvl(i,0)) from tab1;
|2.66666666 |1.6 |
select nvl(cast i as char, 'Неопределено') from tab1;
| 1            |
| Неопределено |
| 3            |
| 4            |
| Неопределено |