在我的查询中(注意我没有使用过程)我需要使用一个布尔参数来定义是否过滤掉某些记录。
我的参数名称是“WO”(=没有)。所以 - 如果用户选择&WO = 'TRUE'
,我希望过滤掉一些记录。
我的方法是在where子句中使用'case when',如下所示:
select *
from tbl1
where case when &WO = 'TRUE' then tbl1.field1 not in ('AB','CD','EF') end
我知道语法或我的整个方法都不正确。
答案 0 :(得分:2)
你不能那样使用case
; case
的结果需要与某些东西进行比较。你可以这样做:
select *
from tbl1
where nvl('&WO', 'FALSE') != 'TRUE'
or tbl1.field1 not in ('AB','CD','EF')
如果or
的第一部分等于假 - 即&WO
为空或不TRUE
- 那么第二部分不会被评估。