J'ai donc une fonction select_id_from_table(_t)
. Il choisit une certaine colonne de la table (_t) où _t est un nom de table en tant que paramètre. Je l'appelle comme SELECT select_id_from_table('tablename')
.Maintenant Je veux créer une autre fonction où la fonction fait quelque chose comme ceci:passer paramètre et référence dans une fonction de mise à jour dans postgresql
CREATE OR REPLACE FUNCTION myfunction(_u type1, _t type2) returns void as $$
BEGIN
UPDATE (_u) set score=score+1 where _u.id in _t.id;
END;
$$ LANGUAGE plpgsql
Le problème est qu'il ne peut pas passer le paramètre correctement. Et aussi ce que devraient être type1 et type2? _u et _t sont les deux noms des tables. J'ai essayé:
$$begin
create temp table lid as (select * from select_id_from_table(_t));
execute format ('update '||quote_ident(_u) ||' set score= score+1 where
'||quote_ident(_u) ||'.id_ in (
select * from select_id_from_table ('||quote_ident(_t)||') as
abc)');
end;$$
J'ai aussi essayé de créer une table temporaire, sélectionnez select_id_from_table(_t)
dans cette table temporaire et faire référence ultérieurement. Mais je ne sais toujours pas comment le citer en execute format('')
. Toute idée serait appréciée.
je change à string_agg (t :: texte, '') et où% I.id_ en (..) alors ça marche. Je vous remercie! –