Просто интересно, есть ли лучший способ написать следующий фрагмент кода PL / SQL в ORACLE?
IF(p_c_courtesies_cd is not null
OR p_c_language_cd is not null
OR v_c_name is not null
OR v_c_firstname is not null
OR v_c_function is not null
OR p_c_phone is not null
OR p_c_mobile is not null
OR p_c_fax is not null
OR v_c_email is not null
) THEN
-- Do something
END IF;

If coalesce( expr1, expr2, ... expr_n ) is not null then do something end if;
(Спасибо, Тони за исправление)
В оригинале вы должны прочитать каждую строку, включая «ИЛИ» и «IS NOT NULL» - если в одной из строк по ошибке написано «IS NULL», это может быть пропущено (хотя форматирование помогло бы в этом) - однако функция COALESCE чище и идеально передает цель.
если coalesce (expr1, expr2, ... exprn) не равно нулю, то ...
Другой способ, использующий тот факт, что Oracle рассматривает NULL и '' как одно и то же:
IF p_c_courtesies_cd
|| p_c_language_cd
|| v_c_name
|| v_c_firstname
|| v_c_function
|| p_c_phone
|| p_c_mobile p_c_fax
|| v_c_email is not null
THEN
-- Do something
END IF;
Хотя это будет работать в Oracle, имейте в виду, что это несовместимо со стандартом SQL-92. См. stackoverflow.com/questions/462471/…
Я отвечу просто «Нет».
Хотя есть несколько альтернативных способов написания одной и той же конструкции, я не думаю, что они обязательно «лучше».
Любой может взглянуть на оператор IF и точно понять, что оно означает. Альтернативы, основанные на конкатенации или использовании оператора coalesce, просто скрывают цель.
+1 Все остальные методы (в том числе и мой) сохраняют TYPING, но за счет ясности смысла. Я не удивлюсь, если исходное утверждение не сработало.
Ник, я бы сказал, что человек, который не умеет читать COALESCE и не делает RTFM, находится в неправильном бизнесе.
Возможно, но кроме уменьшения ясности это ничего не добавляет.
Не уверен, что согласен, что так лучше. Это короче. Однако оригинал действительно передает замысел.