Frage

PostgreSQL implementiert die execute ... using option zum Übergeben von Parametern an dynamisches SQL, und soweit ich das beurteilen kann, wurde diese Funktion in Version 8.4 eingeführt.Wir verwenden Greenplum, das in Version 8.2 von PostgreSQL abgespalten wurde, daher verfügt es nicht über diese Funktion.

Gibt es eine andere Möglichkeit, dasselbe in Greenplum oder PostgreSQL 8.2 zu tun?

War es hilfreich?

Lösung

Ich kann es nicht genau sagen, aber es gibt einen Hinweis in der CREATE FUNCTION Dokumentation:

langname Der Name der Sprache, in der die Funktion implementiert ist.Kann SQL, C, intern oder der Name einer benutzerdefinierten prozeduralen Sprache sein.Siehe SPRACHE ERSTELLEN für die in der Greenplum-Datenbank unterstützten prozeduralen Sprachen.

Der referenzierte Ort sagt wiederum

Die PL / pgSQL-Sprache ist standardmäßig in der Greenplum-Datenbank installiert.

Jetzt die EXECUTE ... USING ist eine PL / pgSQL-Funktion, daher ist die einzige Frage, aus welcher PostgreSQL-Version sie stammt.Die Dokumentation verweist auf 8.2 - und so sieht es so aus, als hätten Sie kein Glück.

Ich habe den Greenplum-Support kontaktiert, um eine endgültige Antwort zu erhalten, habe aber nie eine Antwort erhalten.

Um das Fehlen dieses Konstrukts zu umgehen, können Sie natürlich jede gewünschte SQL-Zeichenfolge verketten und ausführen.Achten Sie darauf, die übergebenen Werte korrekt zu zitieren und SQL-Injection zu vermeiden.

Andere Tipps

Sie können eine Problemumgehung verwenden, indem Sie eine von dezso erwähnte gespeicherte Funktion verwenden :

CREATE OR REPLACE FUNCTION dynamic_query (table_name TEXT) RETURNS VOID AS $$
BEGIN
    EXECUTE 'SELECT * FROM ' || table_name || ' WHERE column1 LIKE ''a_value''';
END;
$$ language plpgsql;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top