Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   In Operator in Abfragen benutzen (https://www.delphipraxis.net/187232-operator-abfragen-benutzen.html)

schneepflug 10. Nov 2015 10:43

Datenbank: Oracle • Version: 12 • Zugriff über: FireDac

In Operator in Abfragen benutzen
 
Guten Morgen!

Ich versuche mit Delphi Seattle eine Oracle-Datenbankabfrage abzusenden.
Darin möchte ich den in-Operator benutzen um nur bestimmte Artikel anzuzeigen.

Am liebsten würde ich das ganze durch Parameter (:Artikel1, :Artikel2) realiseren um SQL-Injections zu vermeiden.

Nun habe ich hier gelesen, dass dies nicht ohne Weiteres möglich ist:
http://stackoverflow.com/questions/3...sing-in-clause


Deshalb meine Frage an die DelphiPraxis Leute:

Wie realisiert ihr in euren Anwendungen eine in-Operator Abfrage?
Oder verzichtet ihr auf den in-Operator komplett?

Gruß,
schnee

haentschman 10. Nov 2015 11:34

AW: In Operator in Abfragen benutzen
 
Moin...:P

Das mit dem IN hat mit der Delphi Version nicht wirklich was zu tun. Die IN Menge kann man leider nicht als Parameter übergeben. Hier gibt es dann 3 Möglichkeiten.

1. Die IN Menge im SQL mit + '1,' + '2' zusammensetzen. Strings wären zu Quoten. (SQL Injection gefährdet)
2. Man macht sich eine Tabelle für IN Statements in der DB. Dort legt man die IN Werte als Datensätze ab. Als Zusammengehörigkeit verwendet man z.B. eine GUID. Im eigentlichen Statement macht man dann ein subselect auf diese Tabelle mit der GUID. Danach werden die Werte wieder entfernt. Hier kommt es darauf an ob das ganze performant sein muß...
3. SP in der DB -> generiert / aktualisiert eine View z.B.

:thumb:

Dejan Vu 10. Nov 2015 21:36

AW: In Operator in Abfragen benutzen
 
Im SQL-Server schreibe ich mir eine UDF, die mir eine Tabelle liefert. So wird z.B. aus "1,2,3" die Tabelle
Value
1
2
3
Und dann
Code:
select * from Daten
 where exists (
   select 1 from UDF_StringToTable(@Selection) where Value = Daten.Wert
   )
Sowas geht doch bestimmt auch in Oracle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz