sql >> Database >  >> RDS >> Oracle

Hoe om te gaan met optionele parameters in SQL-query?

Ja, met een van de volgende opties:

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);

... zijn niet sargable. Ze zullen werken, maar de slechtste van de beschikbare opties uitvoeren.

Als u maar één parameter heeft, zijn de IF/ELSE en afzonderlijke, op maat gemaakte uitspraken een beter alternatief.

De volgende optie daarna is dynamische SQL. Maar het coderen van dynamische SQL is nutteloos als u de niet-sargable predikaten in het eerste voorbeeld overdraagt. Dynamische SQL stelt u in staat om de query aan te passen terwijl u meerdere paden accommodeert. Maar het brengt ook SQL-injectie met zich mee, dus het moet worden uitgevoerd achter geparametriseerde query's (bij voorkeur binnen opgeslagen procedures/functies in pakketten.



  1. TreeView ImageCombo Vervolgkeuzelijst Toegangsmenu

  2. pip install mislukt met /usr/bin/clang:Geen dergelijk bestand of map

  3. SQL Server Besturingssysteemfout 5:5 (Toegang is geweigerd.)

  4. De MariaDB Audit-plug-in gebruiken voor databasebeveiliging