Одновариантная замена NULL-значения реальным значением
Функция
Одновариантная замена неопределенного значения (NULL-значения) реальным значением.
Спецификация
Общие правила
-
Функция возвращает значение
< выражения1 >
в случае, если< выражение1 >
не является NULL-значением, иначе возвращает значение< выражения2 >
. -
Функция эквивалентна конструкции СУБД ЛИНТЕР:
CASE WHEN < выражение1 > IS NOT NULL THEN < выражение1 > ELSE < выражение2 > END;
-
Типы данных
< выражения1 >
,< выражения2 >
должны быть идентичны или приводимыми. При приведении типов данных по умолчанию (без конструкции CAST…) второй аргумент приводится к типу данных первого аргумента. -
Аргументы могут быть заданы
< SQL-параметром >
, который должен содержать спецификацию типа данных параметра.select nvl(? (char(5)), null); 111 |111 | select nvl(? (char(5)), '222'); NULL |222 |
-
Оба
< подзапроса >
должны содержать одно выбираемое< значимое выражение >
и возвращать скалярное значение. Типы данных возвращаемых значений должны быть идентичными или приводимыми друг к другу.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 | | Неопределено |