Лучший способ структурировать оператор PL / SQL IF THEN?

Просто интересно, есть ли лучший способ написать следующий фрагмент кода 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;
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
3
0
3 732
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий
If coalesce( expr1, expr2, ... expr_n ) is not null then do something end if;

Глянь сюда.

(Спасибо, Тони за исправление)

Не уверен, что согласен, что так лучше. Это короче. Однако оригинал действительно передает замысел.

Dave Costa 20.01.2009 22:49

В оригинале вы должны прочитать каждую строку, включая «ИЛИ» и «IS NOT NULL» - если в одной из строк по ошибке написано «IS NULL», это может быть пропущено (хотя форматирование помогло бы в этом) - однако функция COALESCE чище и идеально передает цель.

Jeffrey Kemp 28.05.2009 07:19

если 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/…

DCookie 21.01.2009 22:24

Я отвечу просто «Нет».

Хотя есть несколько альтернативных способов написания одной и той же конструкции, я не думаю, что они обязательно «лучше».

Любой может взглянуть на оператор IF и точно понять, что оно означает. Альтернативы, основанные на конкатенации или использовании оператора coalesce, просто скрывают цель.

+1 Все остальные методы (в том числе и мой) сохраняют TYPING, но за счет ясности смысла. Я не удивлюсь, если исходное утверждение не сработало.

Tony Andrews 21.01.2009 13:52

Ник, я бы сказал, что человек, который не умеет читать COALESCE и не делает RTFM, находится в неправильном бизнесе.

Stew S 27.01.2009 02:19

Возможно, но кроме уменьшения ясности это ничего не добавляет.

Nick Pierpoint 27.01.2009 03:19

Другие вопросы по теме