Comment créer une fonction dans postgresql avec tablename comme argument et la fonction renvoie l'ensemble de résultats de la table qui est passée en argument pour la requête "select * from TABLE". Ici, le TABLE est l'argument passé à la fonction. Ce que vous voulez est possible mais complètement et complètement inutile.Fonctions avec tablename comme argument dans postgresql
0
A
Répondre
3
La fonction que vous demandez est le suivant:
CREATE FUNCTION selectall(tbl name) RETURNS SETOF record AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT * FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;
Vous avez besoin d'une fonction de retour ensemble (SRF), car une table peut avoir plusieurs lignes. Il doit renvoyer record
car des tables différentes renvoient différents ensembles de colonnes. Vous ne pouvez pas utiliser cette SRF dans une liste de sélection:
test=# SELECT selectall('student');
ERROR: set-valued function called in context that cannot accept a set
CONTEXT: PL/pgSQL function selectall(name) line 3 at RETURN QUERY
Vous pouvez l'utiliser comme une source de ligne, mais la requête devient plus qu'un SELECT * FROM student
simple. Vous ne pouvez pas utiliser comme si:
Vous ne pouvez l'utiliser en spécifiant une définition d'alias et de colonne:
test=# SELECT * FROM selectall('student') AS t(id int, first_name text, col3 boolean, ...);
Comparons maintenant que, pour:
test=# SELECT * FROM student;
Voir les exemples dans le manuel: http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN –
Pouvez-vous expliquer ce que vous voulez vraiment faire? Une fonction du type que vous décrivez serait inutile et compliquée à utiliser. – Patrick
Fonction @Patrick nommée selectall (nom_table). Et la fonction exécute "select * from nomtable", puis le jeu de résultats est retourné. – mrg