PL/SQL - conditions Facultatives dans la clause where- - sans le sql dynamique?

J'ai une question lorsque toutes les conditions sont nécessaires. Voici un exemple de ce à quoi ça ressemble quand toutes les conditions sont utilisées:

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

Les parties marquées comme --this is variable sont les parties qui, ainsi, de varier! Si une condition n'est PAS spécifié, alors il n'y a pas de valeur par défaut. Par exemple, si l'entrée spécifie "*" pour q.type (mais laisse tout de même), alors la requête doit correspondre à tout pour type, et exécuter en tant que:

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

Je sais qu'il est possible d'utiliser le sql dynamique pour construire cette requête à la volée, mais je me demande quelle sorte de problèmes de performances, cela pourrait causer, et si il ya une meilleure façon de le faire.

Version Oracle 10g.

OriginalL'auteur FrustratedWithFormsDesigner | 2009-11-11