Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je fais mes premières armes en plpgsql et j'ai un problème de syntaxe.
Je souhaite faire une boucle sur les résultats d'une sélection mais dans cette sélection le nom de la table est en fait un paramètre de ma fonction.
En gros je souhaite écrire quelque chose qui ressemble à ca:
CREATE OR REPLACE FUNCTION ma_fonction(ma_table text) AS $BODY$
DECLARE
c1 text;
c2 text;
....
BEGIN
....
FOR x in (SELECT champ_1, champ_2 FROM ma_table)
LOOP
c1 = x.champ_1;
c2 = x.champ_2;
....
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql';
Mais le 'ma_table' dans le FOR x ne passe pas.
(Par contre si je mets le nom de la table en dur c'est ok)
Merci pour votre aide
Hors ligne
Regardez http://docs.postgresql.fr/9.4/plpgsql-c … tures.html , et plus particulièrement 40.6.4. Boucler dans les résultats de requêtes.
Julien.
https://rjuju.github.io/
Hors ligne
Merci (j'étais allé sur cette page mais je l'avais certainement passé trop vite)
Bref: voici le code correspondant à la solution trouvée
CREATE OR REPLACE FUNCTION ma_fonction(ma_table text) AS $BODY$
DECLARE
c1 text;
c2 text;
....
BEGIN
....
FOR x in EXECUTE '(SELECT champ_1, champ_2 FROM ' || ma_table || ')'
LOOP
c1 = x.champ_1;
c2 = x.champ_2;
....
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql';
Hors ligne
Pensez à utiliser quote_ident pour éviter tout problème d'injection SQL du type :
SELECT ma_fonction($$une_table; DROP TABLE x;$$);
Guillaume.
Hors ligne
Pages : 1