3

ORACLE で次の PL/SQL コードを記述するためのより良い方法があるかどうか疑問に思っていますか?

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

4 に答える 4

9
If coalesce( expr1, expr2, ... expr_n ) is not null then do something end if;

こちらをご覧ください。

(Tonyさん、訂正ありがとうございます)

于 2009-01-20T16:20:03.993 に答える
2

私の答えは単純な「いいえ」です。

同じ構成を書くためのいくつかの代替方法がありますが、必ずしも「より良い」とは思いません。

誰でもIFステートメントを見て、それが何を意味するのかを正確に知ることができます。連結または合体演算子の使用に基づく代替案は、意図を曖昧にするだけです。

于 2009-01-20T23:34:44.100 に答える
1

合体(expr1、expr2、... exprn)がnullでない場合...

于 2009-01-20T16:24:59.740 に答える
0

別の方法として、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;
于 2009-01-20T16:57:01.937 に答える