CASE
не делает то, что вы ожидаете.Он предназначен для присвоения значений, а не для создания условий.Я думаю, что вы хотите OR
:
select *
from hours_tbl
where
1=1
and (
( :type ='Hours' and nvl(hours, 0) > 0 )
or ( :type ='Earnings' and nvl(hours, 0) =0 )
or ( :type not in ('Hours','Earnings') and nvl(hours, 0) >= 0 )
)
Примечание: как сообщается @ TonyAndrew , если :type
может быть NULL
, последнее выражение должно быть написано:
( nvl(:type,'x') not in ('Hours','Earnings') and nvl(hours, 0) >= 0 )