Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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.
Julien.
https://rjuju.github.io/
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.
Julien.
https://rjuju.github.io/
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 ...
Julien.
https://rjuju.github.io/
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
Pages : 1