PL / SQL - Warunki opcjonalne w klauzuli gdzie - bez dynamicznego sql?
Mam pytanie, gdzie nie wszystkie warunki są konieczne. Oto przykład, jak to wygląda, gdy używane są wszystkie warunki:
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
Części oznaczone jako--this is variable
są części, które się różnią! Jeśli warunek NIE jest określony, nie ma wartości domyślnej. Na przykład, jeśli dane wejściowe określają „*” dla q.type (ale pozostawia wszystko to samo), to zapytanie powinno pasować do wszystkiego dla typu i wykonać jako:
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
Wiem, że możliwe jest użycie dynamicznego sql do zbudowania tego zapytania w locie, ale zastanawiam się, jakie problemy z wydajnością może to spowodować i czy jest lepszy sposób, aby to zrobić.