Являются ли оператор CASE и DECODE эквивалентом?

Кажется, что простое выражение CASE и функция DECODE эквивалентны, и что возвращаемые ими результаты должны быть идентичны. Они?

Документация имеет следующее сказать опростое выражение CASE:

Простое выражение CASE возвращает первый результат, для которого selector_value соответствует селектору. Остальные выражения не оцениваются. Если значение selector_value не соответствует селектору, выражение CASE возвращает else_result, если оно существует, и NULL в противном случае.

Сравнивая это сФункция ДЕКОДописания кажутся идентичными.

DECODE сравнивает expr с каждым поисковым значением по одному. Если expr равен поиску, Oracle Database возвращает соответствующий результат. Если совпадений не найдено, Oracle возвращает значение по умолчанию. Если значение по умолчанию опущено, Oracle возвращает ноль.

Какискомое выражение CASE может быть эквивалентно простому, это также может быть истолковано так же.

Все эти три утверждения, кажется, возвращают один и тот же результат, 0.

select case 1 when 2 then null else 0 end as simple_case
     , case when 1 = 2 then null else 0 end as searched_case
     , decode(1, 2, null, 0) as decode
  from dual

Всегда ли простое выражение CASE и функция DECODE (и в определенных обстоятельствах искомое выражение CASE) всегда возвращают один и тот же результат?

Ответы на вопрос(3)

Ваш ответ на вопрос