Hallo!
Man kann das auch alles in den select packen…
also da gibts mal den decode…
select decode(spalte, wert1, result1, result2) from dual
den kann man in etwa so lesen:
wenn spalte==wert1 dann liefere result1, sonst liefere result2
weiters kann man das noch weiter schachteln:
decode(spalte, wert1, result1, decode(spalte, wert2, result2, defaultwert))
also pseudocode würde für den decode so aussehen:
function decode(param1, param2, param3, param4)
begin
if param1==param2 then
return param3;
elsif
return param4;
end if;
end;
weiters kannst du auch noch default-werte in die where-bedingung einfügen:
select werte from tabelle
where (nvl(:bINPUTVAR, 0)=0 or :bINPUTVAR=spaltenname)
was hier gemacht wird:
die bindvariable „:bINPUTVAR“ muss entweder eben der spalte entsprechen oder 0 oder NULL sein (nvl verwandelt null in den zweiten parameter, also in diesem Fall 0).
Dabei musst du aber vorsichtig sein, wenn es dann um Performance geht. Oracle kann so eine Where-klausel nicht richtig auflösen, d.h. ein Datenbank-Index greift dann nicht!
Alles in allem kann man damit sehr viele schweinereien anfangen, man muss nur immer aufpassen, wie das performt.
In einer where eine function aufrufen würde ich mir auch sehr überlegen, weil das die Komplexität in der function versteckt. Wenn jetzt ein Select 5000 Datensätze bringt, wird diese function 5000x ausgeführt… also wirklich mit vorsicht genießen!
hoffe, ich hab dich nicht allzu sehr verwirrt