Похоже, что простое выражение CASE и функция DECODE эквивалентны и что возвращаемые ими результаты должны быть идентичными. Они?
В документации есть следующее: простое выражение CASE:
Простое выражение CASE возвращает первый результат, для которого Селектор выбора селектора_значения. Остальные выражения не являются оценены. Если селектор не выбирает селектор_выражения, выражение CASE возвращает else_result, если он существует, и NULL в противном случае.
Сравнивая это с функцией DECODE, описания кажутся идентичными.
DECODE сравнивает expr с каждым значением поиска по одному. Если expr равно к поиску, то Oracle Database возвращает соответствующий результат. Если совпадение не найдено, тогда Oracle возвращает значение по умолчанию. Если значение по умолчанию опущено, то Oracle возвращает null.
Поскольку выражение показало выражение 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) возвращает тот же результат?