PL / SQL - Optionale Bedingungen in where-Klausel - ohne dynamisches SQL?

Ich habe eine Frage, bei der nicht alle Bedingungen erforderlich sind. Hier ist ein Beispiel, wie es aussieht, wenn alle Bedingungen verwendet werden:

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

Die Teile markiert als--this is variable sind die Teile, die gut sich unterscheiden! Wenn eine Bedingung NICHT angegeben ist, gibt es keinen Standardwert. Wenn die Eingabe beispielsweise "*" für q.type angibt (ansonsten bleibt alles gleich), sollte die Abfrage für type mit allem übereinstimmen und ausgeführt werden als:

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

Ich weiß, dass es möglich ist, dynamisch SQL zum Erstellen dieser Abfrage im laufenden Betrieb zu verwenden, aber ich frage mich, welche Art von Leistungsproblemen dies verursachen könnte und ob es eine bessere Möglichkeit gibt, dies zu tun.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage