我試圖根據IN參數來制定WHERE子句。出於這個原因,我正在做一些關於在WHERE IN子句中使用CASE的實驗。這是什麼工作正常:在WHERE IN中使用CASE條款
SELECT * FROM TABLE1 WHERE COL1 IN (SELECT ID FROM TABLE2);
考慮我有一個名爲P1的輸入參數。該類型不是必需的。如果P1的值爲null,則以下一個也能正常工作:
SELECT * FROM TABLE1 WHERE COL1 IN (CASE P1 WHEN NULL THEN COL1 ELSE (SELECT ID FROM TABLE2));
但如果P1不爲NULL,我得到
ORA-01427:單行子查詢返回不止一行
錯誤。
如果你想知道爲什麼我需要這個,讓我快速解釋它。存儲過程將接受許多輸入參數。其中一些將是用戶定義的集合類型。並且所有參數都是可選DEFAULT NULL值。所以我想檢查一個參數是否爲NULL,如果是這種情況,那麼比較與該參數相對應的列對其本身(這意味着該列沒有過濾器),否則使用參數內的值(s)過濾列。我試圖以某種方式嘗試嗎?
太棒了。非常感謝。 – 2013-02-20 14:01:31