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

#1 23/05/2014 15:56:43

Sadewizz
Membre

fonction union de toutes les tables

Bonjour,

Ci dessous j'ai essayer de mettre en place une fonction me permettant de récupérer certaines infos sur mes tables en faisant une union entre elles.
seulement la fonction s'effectue mais me renvoie 0 résultat avec la requête suivante :

select * from table_union();

Mon code :

CREATE OR REPLACE FUNCTION table_union () RETURNS table(i text, n text, g geometry)  
language plpgsql
as
$BODY$
DECLARE
 tables record;
BEGIN
  FOR tables IN SELECT tablename FROM pg_tables where tablename 
		 IN 
		(select tablename from pg_tables where schemaname ='france' and tablename in (SELECT f_table_name FROM geometry_columns where f_table_name not like '%_t' and f_table_name not like 'france_littoral' and f_table_name not like 'box%' and f_table_name not like 'rast%'))
  LOOP
   Execute 'select '||quote_ident (tables.tablename)||'.id as id, '||quote_ident(tables.tablename)||'.nom_donnee as nom, '||quote_ident(tables.tablename)||'.the_geom_wgs84 as yhe_geom from '||quote_ident(tables.tablename)||';' 
    RETURN ;
  END LOOP;
END
$BODY$;

Avez vous une idée de la provenance de mon / mes erreurs?
Merci pour d'éventuelles éclaircicement et bon week end a vous!!

Hors ligne

#2 23/05/2014 16:28:23

Géronimo
Membre

Re : fonction union de toutes les tables

Essai RETURN NEXT à la place de ton RETURN à la fin de ton script...

Hors ligne

#3 23/05/2014 16:31:04

Sadewizz
Membre

Re : fonction union de toutes les tables

Re salut,

Pour ceux que sa intéressent, j'ai pu résoudre mon problème (avec un peu de chance).

--drop function table_union();
CREATE OR REPLACE FUNCTION table_union () RETURNS table (i varchar, n varchar, g geometry)  
language plpgsql
as
$BODY$
DECLARE
 tables record;
BEGIN
  FOR tables IN SELECT tablename FROM pg_tables where tablename 
		 IN 
		(select tablename from pg_tables where schemaname ='france' and tablename in (SELECT f_table_name FROM geometry_columns where f_table_name not like '%_t' and f_table_name not like 'france_littoral' and f_table_name not like 'box%' and f_table_name not like 'rast%'))
  LOOP
  return query Execute 'select '||quote_ident (tables.tablename)||'.id , '||quote_ident(tables.tablename)||'.nom_donnee, '||quote_ident(tables.tablename)||'.the_geom_wgs84  from '||quote_ident(tables.tablename)||';' 
    RETURN ;
  END LOOP;
END
$BODY$;

Le "RETURN QUERY" a tout changé il faut croire.

Bon week end!
Sadewizz (steack de cerf! wink)

Hors ligne

#4 23/05/2014 16:33:21

Géronimo
Membre

Re : fonction union de toutes les tables

Je crois que juste en modifiant le RETURN de ton premier script en RETURN NEXT, tu aurais pu avoir le même résultat...

Hors ligne

#5 23/05/2014 16:33:57

Sadewizz
Membre

Re : fonction union de toutes les tables

Salut Géronimo,

Il me semble qu'avec "RETURN NEXT", il me signalait un erreur de syntaxe...
Mais merci pour ton intervention wink.

Hors ligne

#6 23/05/2014 16:35:28

Géronimo
Membre

Re : fonction union de toutes les tables

T'avais peut-être pas mis de ; à la fin... Parce que moi, ça marche avec RETURN NEXT.

Hors ligne

Pied de page des forums