[ORACLE] SQL: AND / OR bei 4 Parametern anwenden

maljian

Grünschnabel
Ahoi

Ich habe die folgenden Parameter
  • pdBeginn
  • pdEnde
  • pnBetrieb
  • pnProjektNr
Es soll möglich sein, dass nur die einzelnen Parameter angegeben werden können, es soll aber auch die Möglichkeit geben, dass Datum mit Betrieb, Datum mit Projekt und alle Parameter zusammen angegeben werden können.

Ich wollte Fragen, ob es eine einfachere Überprüfung bei einem Select gibt, als das was ich geschrieben habe.

SQL:
[I]AND ((ftier.ftier_datum                >= pdBeginn
                        AND
                        nvl(ftier.ftier_datum,sysdate-1) <= nvl(pdEnde, sysdate)
                        AND
                        pnNrBetrieb                      IS NULL
                        AND
                        pnProjektNr                      IS NULL)
                        OR  
                        (ftier.ftier_datum               >= pdBeginn
                        AND
                        nvl(ftier.ftier_datum,sysdate-1) <= nvl(pdEnde, sysdate)
                        AND
                        HEXP_NR                           = pnNrBetrieb)
                        OR
                        (ftier.ftier_datum               >= pdBeginn
                        AND
                        nvl(ftier.ftier_datum,sysdate-1) <= nvl(pdEnde, sysdate)
                        AND
                        fpro.fpro_projektnr               = pnProjektNr)
                        OR
                        (HEXP_NR                          = pnNrBetrieb
                        AND
                        pnProjektNr                      IS NULL)
                        OR
                        (fpro.fpro_projektnr              = pnProjektNr
                        AND
                        pnNrBetrieb                       IS NULL))[/I]
 
Zuletzt bearbeitet von einem Moderator:
Versuch mal sowas
SQL:
NVL(pnProjektNr, fpro.fpro_projektnr) = fpro.fpro_projektnr
Bei Null vergleicht er den Tabellenwert mit sich selber -> True
 
Super, danke :)

Wie simpel doch manchmal die Lösungen sein können :D

[code = sql]
(ftier.ftier_datum >= nvl(pdBeginn,ftier.fiter_datum)
AND
nvl(ftier.ftier_datum,sysdate-1) <= nvl(pdEnde, sysdate)
AND
nvl(pnNrBetrieb,hexp_nr) = hexp_nr
AND
nvl(pnProjektNr,fpro.fpro_projektnr) = fpro.fpro_projektnr)
[/code]
 
Zurück