Ich würde gerne in einer Funktion eine Tabelle abfragen, dessen Name ich über einen Parameter übergebe:
SELECT * FROM $1 WEHRE $2 > $3
ohne EXECUTE zu verwenden! Ist dies überhaupt möglich? Der grund dafür ist, dass der String beim zusammensetzen für EXECUTE viel zu lange wird und ich gerne direkt mit den Datentypen arbeiten möchte. Meine Lösung sieht im Moment so aus und die finde ich nicht so toll:
querySelect := 'SELECT * FROM ‘||$1||’ WHERE ‘||$2||’ > ‘||$3||’;
EXECUTE querySelect ;
und als Parameter muss ich varchar übergeben, obwohl ich lieber integer übergeben würde. Gibt es da wirklich keine bessere Lösung?
Vielleicht bin ich noch nicht so bewandert mit Funktionen :-).
Zu deinem Hä:
Wenn ich einen EXECUTE ausführen will, muss ich eine Variable des Typs varchar oder text deklarieren - oder?
DECLARE
queryInsert text;
BEGIN
queryInsert := 'INSERT INTO ‘||$1||’ ()
SELECT ( FROM
WHERE ;
EXECUTE queryInsert;
END;
um den Query ausführen zu können. Zumindest, wenn ich Parameter zu einem String zusammensetzen muss.
Das Problem:
Die Länge der kann ca. 15’000 Zeichen sein. Ich muss also sogar den Typ text verwenden. Ohne Execute wäre dies nicht nötig. Ich brauche den Execute nur, weil ich nicht vorher weiss wie die Tabelle heisst :-(! Ansonsten würde es auch ohne gehen. Du fragst dich vielleicht, wieso ich da so viele Bedinungen habe. Es sind nicht so viele aber vorallem bit(500) Daten Manipulationen und bei etwa 30 Bedingungen komme ich auf 30 * 500 = 15000 oder mehr Zeichen…
Das Problem:
Die Länge der kann ca. 15’000 Zeichen sein. Ich muss also sogar den Typ text verwenden.
Darin sehe ich aber kein Problem. Ich bin mir grad nicht ganz sicher, wie lang TEXT sein darf, ich glaube, so 2 GByte. Mit Deinen 15 KByte hast Du da noch ein paar Reserven.