Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
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
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
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
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