sql >> Database teknologi >  >> RDS >> Oracle

Hvordan håndterer man valgfri parametre i SQL-forespørgsel?

Ja, ved at bruge et af følgende:

WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);

...kan ikke sarges. De vil fungere, men udføre de værste af de tilgængelige muligheder.

Hvis du kun har én parameter, er IF/ELSE og separate, skræddersyede udsagn et bedre alternativ.

Den næste mulighed efter det er dynamisk SQL. Men kodning af dynamisk SQL er ubrugelig, hvis du overfører de ikke-sargerbare prædikater i det første eksempel. Dynamisk SQL giver dig mulighed for at skræddersy forespørgslen, mens du tager højde for adskillige stier. Men det risikerer også SQL-injektion, så det bør udføres bag parametriserede forespørgsler (helst inden for lagrede procedurer/funktioner i pakker).



  1. SUBSTR() Funktion i Oracle

  2. FLOOR() Funktion i Oracle

  3. SQLite Vis tabeller

  4. Flere forespørgsler udført i java i en enkelt sætning