当满足包含在函数中的条件时,我需要将筛选条件包含在选择查询中。 如果条件不满足,则不应应用过滤条件。
代码:
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>>;
有什么想法吗?
答案 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)