PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 19/03/2013 15:54:31

inesjg
Membre

le resultat de select dans un tableau??

Bonjour
Je veux juste savoire comment attrivuer le resultat d'une requète select dans un tableau comme l'exmple:

create or replace function linksegment() returns setof geometry as $$
declare
lg geometry(linestring);
tabfraction double precision array;   --tableau des réelles
i integer;
begin

for lg in (select the_geom from roadbrest)
loop
 select into tabfraction fractionligne1 from intersectionposifloat2 where ligne1=lg or ligne2=lg order by  fractionligne1 asc  ;  -- remplir tableau tabfraction  par la requète select en ordre croissant !!!
 while i <= array_length(tabfraction)
 loop
 insert into linksegments(point1,point2) values(tabfraction[i],tabfraction[i+1]);
 end loop;
return next lg;
  end loop ;
  end
  $$
  LANGUAGE 'plpgsql';
  
  select linksegment()

Le problème est  dans ce ligne ou je veux remplir tabfraction le tableau des réelles par la resultat de requète select

 select into tabfraction fractionligne1 from intersectionposifloat2 where ligne1=lg or ligne2=lg order by  fractionligne1 asc  ;

mais voici l'erreur qu'il l'affiche : ERREUR:  la valeur du tableau doit commencer avec « { » ou avec l'information de la dimension. merci

Hors ligne

#2 19/03/2013 16:09:05

rjuju
Administrateur

Re : le resultat de select dans un tableau??

Bonjour,

il faut soit que le select renvoie un tableau (array_agg par exemple), soit ajouter la valeur au tableau (tableau := tableau || valeur). Votre traitement serait plus rapide si vous remplaciez les boucles par des requêtes. De plus, à première vue il manque un niveau de boucle.

Hors ligne

#3 19/03/2013 16:28:20

inesjg
Membre

Re : le resultat de select dans un tableau??

je suis désolé mais vraiment je besoin d'un exemple pour utiliser array_agg pour retourner un tableau.
Ainsi pour les boucle je trouve pas vraiment une requête peur remplacer les boucles !!

Hors ligne

#4 19/03/2013 16:35:06

rjuju
Administrateur

Re : le resultat de select dans un tableau??

select array_agg(i) as tableau from generate_series(1,10) i;

Pour votre fonction, je ne sais pas trop ce que vous voulez faire, mais avec les fonctions window (lead ou lag) et la clause RETURNING vous devriez pouvoir vous passez d'au moins une des boucles.

Hors ligne

#5 19/03/2013 17:40:43

inesjg
Membre

Re : le resultat de select dans un tableau??

pour array_agg j'ai essayer de faire ce code la

set tabfraction = (select array_agg(fractionligne1 order by  fractionligne1 asc)  from intersectionposifloat2 where ligne1=lg ) ;   
  

mais il y 'a un erreur de syntaxe  dans l'affectation de tabfraction à la requête?

Hors ligne

#6 19/03/2013 17:58:49

rjuju
Administrateur

Re : le resultat de select dans un tableau??

set permet de modifier un paramètre de configuration (set work_mem par exemple).

Essayez avec SELECT array_agg(...) INTO tabfraction FROM ...

Hors ligne

#7 19/03/2013 21:28:28

inesjg
Membre

Re : le resultat de select dans un tableau??

merci ça marche mais juste je comprends pas comment je peux verifier que  le boucle la ligne lg sera fixe jusqu'a la fin de code

select name,lead (the_geom) over (order by gid) from roadbrest  into lg; fixer un ligne de la table

tabfraction := (select array_agg(floatfraction order by  floatfraction asc)  from interobject where "the_geomRoad"=lg )  ;   tableau des fraction de ce ligne en ordre croissant
  
 while i <= array_length(tabfraction,1) --boucle sur le tableau 
 loop
 
insert into Links (geomline,source,destination)
   values(ST_line_substring(lg,tabfraction[i],tabfraction[i+1]),ST_Line_Interpolate_Point(lg,tabfraction[i]),ST_Line_Interpolate_Point(lg,tabfraction[i+1]));-- insertion des valeurs de  tableau dans un autre table  
 i:=i+2;
 end loop;

Hors ligne

#8 19/03/2013 22:28:07

inesjg
Membre

Re : le resultat de select dans un tableau??

mon problème que j'ai pas des erreurs la requête s’exécute dans quelques secondes sans faire l'insertion dans le tableay Links !!

Hors ligne

Pied de page des forums