where子句中CASE语句中的IN运算符

时间:2018-10-02 01:34:16

标签: oracle case where decode clause

当p_type为null时,我必须提供两个值,即('value1','value2')。 如何在where子句中使用Case或Decode语句实现此目的? 在PL / SQL块下面无效,并抛出缺少关键字的错误:语句被忽略。

Declare
l_xml CLOB;
p_type varchar2(200) := 'value1'; -- can be null
begin
SELECT XMLAGG (
            XMLELEMENT ("Address",
            (XMLFOREST (usg.code as "CODE",
            usg.date as "Date"
            )))) .getclobval()
             into l_xml
                        FROM  usg

WHERE usg.number = '12345'  
AND usg.code = p_type
OR CASE WHEN p_type IS NULL THEN usg.code in ('value1','value2') END;

dbms_output.put_line (l_xml);

end;

2 个答案:

答案 0 :(得分:0)

在此特定实例中,您不需要CASE。

WHERE usg.number = '12345'  
AND (usg.code = p_type
     OR
     (p_type IS NULL AND usg.code in ('value1','value2'))
    )

答案 1 :(得分:-2)

case语句应该是select语句的一部分,而不是条件