Оператор case в предложении where с предложением In - PullRequest
0 голосов
/ 22 апреля 2020

Я попытался использовать оператор case в предложении where, который должен фильтровать мое условие where на основе значения параметра, переданного моей процедуре, но это не сработало

, где case, когда p_parameter = 'Y' затем 'Y' else ('Y', 'N') END в Hidden_flag_column

1 Ответ

0 голосов
/ 22 апреля 2020

Попробуйте

where 
case when p_parameter ='Y' 
     then case when Hidden_flag_column = 'Y' then 1 else 0 end
     else case when Hidden_flag_column in ('Y','N') then 1 else 0 end 
END = 1

Пример с p_parameter = 'Y', а также с 'N' и Hidden_flag_column = 'N'.

select * from dual
where 
case when 'N' ='Y' 
     then case when 'N' = 'Y' then 1 else 0 end
     else case when 'N' in ('Y','N') then 1 else 0 end 
END = 1

дает 1 строку, а

select * from dual
where 
case when 'Y' ='Y' 
     then case when 'N' = 'Y' then 1 else 0 end
     else case when 'N' in ('Y','N') then 1 else 0 end 
END = 1

дает 0 строк.

...