dynamisches SQL bzw. WHERE Parameter möglich?

Hallo an alle,

Gibt’s eine Möglichkeit dynamisch ohne string Verkettungen WHERE Parameter zu erstellen und die Abfrage abzufeuern?

Vielen Dank im Voraus.

Ja, mit prepared statements.

Wie genau das geht, hängt von Deiner Programmiersprache ab.

Hallo castorp,

Genau hier liegt die Problematik. Es muss in diesem Fall PL/pgSQL benutzt werden :frowning:

PREPARE?

http://www.postgresql.org/docs/current/static/sql-prepare.html

pl/pgSQL wird Serverseitig ausgeführt. Das bedeutet, das du deine Parameter irgendwie bis dahin bringen musst …

Das dies serverseitig ausgeführt wird, ist mir bewusst. Nur muss ich für ein, aus meiner Sicht, falsch designtes Datenbankschema eine Lösung finden. Hier geht es darum das die Datenbank via ORMapper erstellt wurde und nun für eine etwas komplexe Abfrage ca. 250 JOINs erzeugt werden und das nicht perfomant ist.

Nun ist die angedachte Lösung, auf der Datenbank die Abfrage auszuführen und sich die entsprechenden Ergebnisse zurückzugeben. Da aber der Benutzer mehrere Filterkriterien bestimmen kann oder auch nicht, muss auch eine Flexibilität in der Funktion gegen sein. Im Moment befasse ich mich damit, wie das so einfach als möglich funktionieren könnte. Schließlich muss das ganze auch noch wartbar sein.

pl/pgSQL kennt quote_ident() und quote_literal().
Ist zwar kein Prepare, aber funktionieren auch sehr gut.

Außerdem sind Anfragen, die du als plain SQL in eine Funktion schreibst, automatisch prepared.