Vous n'êtes pas identifié(e).
salut ,
je definie cette fonction je donne le nom de tableau comme paramétre :
CREATE OR REPLACE FUNCTION nomm(character varying, integer)
RETURNS character varying AS
$BODY$
DECLARE
rec RECORD ;
col text;
table_name alias for $1 ;
BEGIN
col = 'id';
EXECUTE'SELECT rec FROM f_table_name = ' ||
quote_literal(table_name) 'WHERE f_table_column = '|| quote_literal(col) and table_name.col= $2;
RETURN rec.road_name;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
et j ai la resultat suivante :
ERROR: type "quote_literal" does not exist
merci d'avance
imen
Dernière modification par imenisg (20/11/2009 16:22:29)
Hors ligne
Ce qui est derrière le EXECUTE ne génèrera pas de SQL valide. Il faut que l'ensemble des champs concaténés soit une requête.
Pour commencer il manque un certain nombre de ||.
Ensuite 'FROM f_table_name = ' n'est pas du SQL standard non plus (pas de = dans la clause FROM).
rec ne devrait pas aller dans la clause SELECT mais dans une clause INTO.
Et pour finir, la requête a l'air statique. Aucun intérêt donc à faire un EXECUTE dans le code au lieu de mettre directement la requête…
Que voulez vous faire exactement ? Avez vous déjà recherché des exemples de code similaire à ce que vous voulez faire ?
Dernière modification par Marc Cousin (20/11/2009 16:37:53)
Marc.
Hors ligne
salut
je veux s'avoir si je peut introduire dans une fonction le nom de la table comme paramètre
puis faire des operations sur cette table
Hors ligne
Oui, c'est possible.
Guillaume.
Hors ligne
bonjour
merci gleu pour me repondre mais si tu peut me dire comment
Hors ligne
Il faut utiliser l'ordre SQL EXECUTE. Quelque chose du genre :
CREATE OR REPLACE FUNCTION f1(nom_table text)
RETURNS int4
LANGUAGE plpgsql
AS $$
DECLARE
requete text;
BEGIN
requete := 'SELECT .... FROM ' || nom_table | '...';
EXECUTE requete;
RETURN 1;
END;
$$;
Guillaume.
Hors ligne