2015-01-09 49 views
0

我有列的表是這樣的:甲骨文選擇 - 多個參數一個欄

ID number 
Adress varchar2 
Message varchar2 

地址可以電子郵件或電話

而且我有這樣一個存儲過程:

PROCEDURE get_messages (
    i_email     IN  varchar2, 
    i_phone     IN  varchar2 
    o_messages OUT  messages) 
BEGIN 

其中獲取電子郵件,電話或兩者。

而在此過程中我要選擇的消息是這樣的:

  • 如果i_email和i_phone都是nulls我要選擇所有消息
  • 如果i_email不null和i_phone是null我想選擇發送到電子郵件
  • 所有 消息如果i_phone不null和i_email是null我要選擇發送到手機所有 消息
    • 如果i_email和i_phone都是不nulls我要選擇發送到i_email所有消息和i_phone

我有困難的時候寫的選擇喜歡這樣。

SELECT * FROM MESSAGES 
    WHERE (Address = i_email OR i_email IS NULL) 
     OR 
     (Address = i_phone OR i_phone IS NULL) 

但它只能如果價值觀不nulls

回答

1

試試這個。

SELECT * 
FROM MESSAGES 
WHERE (i_email IS NULL 
     AND i_phone IS NULL) 
     OR (i_email IS NOT NULL 
      AND i_phone IS NULL 
      AND Address = i_email) 
     OR (i_phone IS NOT NULL 
      AND i_email IS NULL 
      AND Address = i_phone) 
     OR (Address = i_email 
      OR i_phone = Address) 
+0

謝謝它的工作原理,但爲什麼你要添加1 = 1,我刪除了它,它似乎是它的工作原理反正 – user2412672

+0

@ user2412672通過這兩個值'NULL'那麼就沒有1 = 1 –

+0

工作我做了,它的工作 – user2412672