Vous n'êtes pas identifié(e).

#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

Pied de page des forums