Лучший способ структурировать PL / SQL, ЕСЛИ ТОГДА оператор? - PullRequest
3 голосов
/ 20 января 2009

Просто интересно, есть ли лучший способ написать следующий фрагмент кода 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;

Ответы [ 4 ]

9 голосов
/ 20 января 2009
If coalesce( expr1, expr2, ... expr_n ) is not null then do something end if;

См. Здесь.

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

2 голосов
/ 21 января 2009

Мой ответ будет простым "Нет".

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

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

1 голос
/ 20 января 2009

если объединение (expr1, expr2, ... exprn) не равно нулю, то ...

0 голосов
/ 20 января 2009

Другой способ, использующий тот факт, что 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...