Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 20/11/2009 16:21:58
- imenisg
- Membre
pl/sql
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
#2 20/11/2009 16:37:12
- Marc Cousin
- Membre
Re : pl/sql
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
#3 20/11/2009 22:35:01
- imenisg
- Membre
Re : pl/sql
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
#4 20/11/2009 23:39:06
- gleu
- Administrateur
Re : pl/sql
Oui, c'est possible.
Guillaume.
Hors ligne
#5 21/11/2009 14:24:27
- imenisg
- Membre
Re : pl/sql
bonjour
merci gleu pour me repondre mais si tu peut me dire comment
Hors ligne
#6 21/11/2009 15:48:56
- gleu
- Administrateur
Re : pl/sql
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