Арифметические уравнения неявно оцениваются в 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 вернет ошибку.

Другие вопросы по тегам