我需要写一个查询,如果相应的参数为Null,则应忽略该列上的任何过滤器,但如果上述参数不为Null,则应使用IN子句进行过滤。我试图使用下面的查询,但我无法使其工作。它是Oracle 11 XE中的HR DB和Employees表,我试图将Job ID作为参数传递,但此参数可能为null,也可能包含多个值。
我所做的一切-
SELECT * FROM HR.EMPLOYEES
WHERE
CASE WHEN NVL(:PARAM_JOB_ID,'NONE')= 'NONE' THEN 'NONE' ELSE JOB_ID END IN NVL(:PARAM_JOB_ID,'NONE');
请引导。
3条答案
按热度按时间h6my8fg21#
这里使用
IS NULL
逻辑:2eafrhcq2#
您必须将
:PARAM_JOB_ID
中的值拆分到行中。类似于以下内容(Scott的示例模式及其EMP
表):SQL*Plus中的演示:
koaltpgm3#
以下为我工作-
如果该值为null,则它不会越过
or
条件,并且将匹配所有行,从而有效地跳过该子句。如果value存在,条件的第一部分将匹配结果之一(基本上是COALESCE
首先能够找到的任何值,子句的后面部分将处理其余部分。希望这能帮助那些遇到类似问题的人。