PL / SQL - Необязательные условия в выражении where - без динамического sql?
У меня есть запрос, где не все условия необходимы. Вот пример того, как это выглядит, когда используются все условия:
select num
from (select distinct q.num
from cqqv q
where q.bcode = '1234567' --this is variable
and q.lb = 'AXCT' --this is variable
and q.type = 'privt' --this is variable
and q.edate > sysdate - 30 --this is variable
order by dbms_random.value()) subq
where rownum <= 10; --this is variable
Части отмечены как--this is variable
являются частями, которые, ну, варьируются! Если условие НЕ указано, то значение по умолчанию отсутствует. Например, если на входе указано «*» для q.type (но все остальное остается неизменным), тогда запрос должен соответствовать всему типу и выполнить как:
select num
from (select distinct q.num
from cqqv q
where q.bcode = '1234567' --this is variable
and q.lb = 'AXCT' --this is variable
--and q.type = 'privt' --this condition ignored because of "type=*" in input
and q.edate > sysdate - 30 --this is variable
order by dbms_random.value()) subq
where rownum <= 10; --this is variable
Я знаю, что можно использовать динамический sql для создания этого запроса на лету, но мне интересно, какие проблемы с производительностью это может вызвать, и если есть лучший способ сделать это.