Арифметические уравнения неявно оцениваются в NULLIF()
В Руководстве по экзамену "Мои основы SQL 1" говорится
select NULLIF(1234, 123+1) from dual;
Арифметическое уравнение не оценивается неявно...
Однако, когда я отправляю запрос ниже, результат null
- кажется, что 123+1 оценивается (хотя я знаю, что запросы разные).
select NULLIF(124, 123+1) from dual;
Итак, что правильно (для экзамена 1Z0-051, в любом случае)? Выражения оцениваются или нет?
1 ответ
Nullif()
функция оценивает как аргументы, так и возвращает NULL
если argument1
равно argument2
, В твоем случае 123+1
не равно 1234
, 123+1
равно 124
не 1234
,
результат нулевой
Не может быть null
в твоем случае.
SQL> select nullif(1234, 123+1) as res
2 from dual;
RES
----------
1234
SQL> select nullif(1234, 1233+1) as res
2 from dual
3 ;
RES
----------
NULL
ПОСЛЕДУЮЩИЙ: Мои 2 цента
Выше NULLIF
эквивалентно приведенному ниже случаю
CASE WHEN 1234=123+1 THEN NULL ELSE 1234 END
Вы не можете указать литерал NULL
для первого выражения.
Также из документации
Если оба аргумента являются числовыми типами данных, то Oracle Database определяет аргумент с более высоким числовым приоритетом, неявно преобразует другой аргумент в этот тип данных и возвращает этот тип данных. Если аргументы не являются числовыми, то они должны иметь одинаковый тип данных, иначе Oracle вернет ошибку.