Question

PostgreSQL implémente le execute ... using option pour transmettre des paramètres dans SQL dynamique, et pour autant que je sache, cette fonctionnalité a été introduite dans la version 8.4.Nous utilisons Greenplum, qui est un dérivé de PostgreSQL en version 8.2, il n'a donc pas cette fonctionnalité.

Existe-t-il un autre moyen de faire la même chose dans Greenplum ou PostgreSQL 8.2 ?

Était-ce utile?

La solution

Je ne peux pas le dire avec certitude, mais il y a un indice dans le CREATE FUNCTION Documentation:

nom de langue Nom de la langue dans laquelle la fonction est implémentée.Peut être SQL, C, interne ou le nom d'un langage procédural défini par l'utilisateur.Voir CREATE LANGUAGE pour les langages procéduraux pris en charge dans la base de données Greenplum.

À son tour, le lieu référencé indique

Le langage PL/pgSQL est installé par défaut dans la base de données Greenplum.

Maintenant le EXECUTE ... USING est une fonctionnalité PL/pgSQL, donc la seule question est de savoir de quelle version de PostgreSQL elle provient.La documentation pointe vers 8.2 - et de cette façon, il semble que vous n'ayez pas de chance.

J'ai contacté le support Greenplum pour obtenir une réponse définitive, mais je n'ai jamais obtenu de réponse.

Quant à contourner l’absence de cette construction, vous pouvez évidemment concaténer n’importe quelle chaîne SQL de votre choix et l’exécuter.Veillez à citer correctement les valeurs transmises et évitez l'injection SQL.

Autres conseils

Vous pouvez utiliser une solution de contournement en utilisant une fonction stockée mentionnée par dezso :

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top