В SQL не существует такой вещи, как «оператор CASE». Ваш пример - CASE
выражение . (CASE
операторы существуют в PL / SQL.)
Документация гласит: "Выражение - это комбинация одного или нескольких значений, операторов и SQL функций, которые оценивают значение". Таким образом, функция SQL не отличается от выражения, это определенный тип выражения c.
Обратите внимание, что DECODE
и CASE
ведут себя по-разному при сравнении значений NULL: DECODE
считает два NULL должны быть «одинаковыми», что является исключением из правила, согласно которому сравнение NULL с чем-либо имеет «неизвестный» результат.
with data(a, b) as (
select 1,1 from dual union all
select 1,null from dual union all
select null,1 from dual union all
select null, null from dual
)
select a, b,
decode(a,b,'same','different') decode_result,
case when a = b then 'same' else 'different' end case_result
from data;
A B DECODE_RESULT CASE_RESULT
------ ------ ------------- -----------
1 1 same same
1 (null) different different
(null) 1 different different
(null) (null) same different