2009-01-20 34 views
3

想知道是否有更好的方法在ORACLE中編寫以下PL/SQL代碼片段?構建PL/SQL IF THEN語句的更好方法?

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; 

回答

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

See here.

(感謝託尼校正)

+1

您錯過了「不爲空」 – 2009-01-20 16:54:47

+1

不確定我同意這樣會好一些。它更短。原來的確表達了意圖。 – 2009-01-20 19:49:36

+2

在原文中你必須閱讀每一行,包括「OR」和「IS NOT NULL」 - 如果其中一行錯誤地表示「IS NULL」,可能會錯過它(儘管格式化會在那裏起作用) - 但是COALESCE功能更清潔並且完美傳達了意圖。 – 2009-05-28 03:19:16

1

如果COALESCE(表達式1,表達式2,... exprn)不爲空,然後...

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; 
2

我的答案是一個簡單的「否」。

雖然有幾種可供選擇的方法來編寫相同的結構,但我認爲任何方法都不一定「更好」。

任何人都可以查看IF語句,並確切知道它的含義。基於連接或使用合併操作符的替代方案只是掩蓋了意圖。