CASE构造在where子句中

时间:2012-11-20 20:29:13

标签: plsql oracle11g

当满足包含在函数中的条件时,我需要将筛选条件包含在选择查询中。 如果条件不满足,则不应应用过滤条件。

代码:

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>>  
and (case when oracle_function() = 'YES' then 'tab_a.cancel_date is null'
      else null
    )

如果我这样写,那么就会抛出“无效的关系运算符”错误。 意识到这个案例应该解析为右边的值,我尝试添加这样的东西,当满足条件时,它不会给我预期的结果:

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>>  
and (case when oracle_function() = 'YES' then 'tab_a.cancel_date is null'
       else '1'
      ) = '1'

我的预期输出应为:

如果oracle_function()= YES,那么我的查询应该有效地解析为:

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>> and tab_a.cancel_date is null;

否则:

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>>;

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

此查询不是case语句,而是要求函数返回除'YES'以外的值,或者日期为空...这应该类似于原始查询:< / p>

select col_a,col_b,cancel_Date 
from tab_a 
where col_c = <<some_condition>>  
and (oracle_function() <> 'YES' OR tab_a.cancel_date is null)