Всички тези по-кратки методи имат няколко недостатъка. Те са бавни, неинтуитивни, потенциално бъги (избягвайте магически стойности, когато е възможно) и са по-собствени от нормалните условия като AND/OR/IS NULL/IS NOT NULL.
NVL, DECODE, COALESCE и т.н. могат да бъдат по-скъпи, отколкото си мислите.
Виждал съм това много пъти в няколко различни контекста, ето прост пример:
--Shorter method: Takes about 0.45 seconds
declare
j number;
begin
for i in 1 .. 1000000 loop
j := i;
if nvl(i <> j, (i is null) <> (j is null)) then
null;
end if;
end loop;
end;
/
--Normal method: Takes about 0.25 seconds
declare
j number;
begin
for i in 1 .. 1000000 loop
j := i;
if i <> j or (i is null and j is not null) or (i is not null and j is null) then
null;
end if;
end loop;
end;
/
Препоръчвам ви да отделите допълнителната секунда, за да го въведете по логичния начин. Вашият код ще изглежда по-добре и ще работи по-бързо.