Оператор IN внутри оператора CASE в предложении where - PullRequest
0 голосов
/ 02 октября 2018

Когда p_type имеет значение null, тогда я должен предоставить два значения, т. Е. ('Value1', 'value2').Как я могу добиться этого, используя оператор Case или Decode в предложении where?Ниже блок 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 голосов
/ 02 октября 2018

Вам не нужен CASE в данном конкретном случае.

WHERE usg.number = '12345'  
AND (usg.code = p_type
     OR
     (p_type IS NULL AND usg.code in ('value1','value2'))
    )
0 голосов
/ 02 октября 2018

Оператор case должен быть частью оператора select, а не там, где условия

...