2013-05-19 48 views
0

在我的查詢中(注意我沒有使用過程),我需要使用一個布爾參數來定義是否過濾掉某些記錄。使用參數過濾掉sql中的多個值

我的參數名稱是「WO」(= without)。所以 - 如果用戶選擇&WO = 'TRUE'我想要過濾掉一些記錄。

我的方法是使用一個「的情況下,當」 where子句中如下:

select * 
from tbl1 
where case when &WO = 'TRUE' then tbl1.field1 not in ('AB','CD','EF') end 

我知道語法或我的整個做法是不正確的。

回答

2

你不能像這樣使用case; case的結果需要與某些東西進行比較。你可以這樣做:

select * 
from tbl1 
where nvl('&WO', 'FALSE') != 'TRUE' 
or tbl1.field1 not in ('AB','CD','EF') 

如果or的第一部分相當於假 - 也就是說,&WO爲空或不是TRUE - 那麼第二部分不計算。

+0

怎麼樣'&WO是null'? –

+1

如果'&WO爲空',那麼你的代碼會過濾'field1'的值'AB','CD'和'EF'。這是不正確的。 –

+0

謝謝@EgorSkriptunoff。大腦(部分)重新安排...希望... –