Czy instrukcja CASE i odpowiednik DECODE?
Wygląda na to, że proste wyrażenie CASE i funkcja DECODE są równoważne i wyniki zwracane przez nie powinny być identyczne. Czy oni są?
Dokumentacja zawiera następujące informacje na tematproste wyrażenie CASE:
Proste wyrażenie CASE zwraca pierwszy wynik, dla którego wartość selector_value odpowiada selektorowi. Pozostałe wyrażenia nie są oceniane. Jeśli żadna wartość selector_value nie odpowiada selektorowi, wyrażenie CASE zwraca else_result, jeśli istnieje, i NULL w przeciwnym razie.
Porównując to doFunkcja DECODE, opisy wydają się być identyczne.
DECODE porównuje wyrażenie z każdą wartością wyszukiwania po kolei. Jeśli wyrażenie jest równe wyszukiwaniu, wówczas baza danych Oracle zwraca odpowiedni wynik. Jeśli nie znaleziono dopasowania, Oracle zwraca wartość domyślną. W przypadku pominięcia wartości domyślnej Oracle zwraca wartość null.
Jakoprzeszukano wyrażenie CASE może być równoznaczne z prostym, może to być również takie samo.
Te trzy stwierdzenia wydają się zwracać ten sam wynik, 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
Czy proste wyrażenie CASE i funkcja DECODE (aw określonych okolicznościach wyszukiwane wyrażenie CASE) zawsze zwracają ten sam wynik?