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 Re : PL/pgSQL » le resultat de select dans un tableau?? » 19/03/2013 22:28:07

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 !!

#2 Re : PL/pgSQL » le resultat de select dans un tableau?? » 19/03/2013 21:28:28

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;

#3 Re : PL/pgSQL » le resultat de select dans un tableau?? » 19/03/2013 17:40:43

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?

#4 Re : PL/pgSQL » le resultat de select dans un tableau?? » 19/03/2013 16:28:20

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 !!

#5 PL/pgSQL » le resultat de select dans un tableau?? » 19/03/2013 15:54:31

inesjg
Réponses : 7

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

#7 Re : PL/pgSQL » Les alias sur Postgresql » 19/03/2013 11:29:32

merci mais dans ce cas comment on peut comparer les valeurs de deux lignes de même tableau ?

#8 PL/pgSQL » Les alias sur Postgresql » 19/03/2013 10:25:13

inesjg
Réponses : 4

Bonjour j'ai essayer de faire une sorte de comparaison entre deux lignes dans le même tableau. Voici ma requête pour chercher les intersections des lignes .

create table interpostgis
as select the_geom as a, the_geom as b,ST_Intersection("roadbrest".a,b) from roadbrest  where ST_Intersects(a,b)=true;

Cette requête  retourne cette erreur : la colonne roadbrest.a n'existe pas
Comme si il comprend pas les alias a et b ??

#10 PL/pgSQL » fonction qui retourne un tableau des réelles » 15/03/2013 17:01:35

inesjg
Réponses : 2

Bonjour
Je veux savoir s'il vous plait comment une fonstion en pgsql peut retourner un tableau et il maffiche un erreur

 create or replace function segmenter() returns setof float[] as $$ -- type de retour de la fonction est float[]
declare
lg geometry(LineString);
PointForLinge geometry(Point) [] ;
tabfloat float array;
i integer;
m integer;
pt geometry(point);
begin
for lg in select the_geom from roadbrest
Loop
for pt in (select  the_geom from projectionfinal where "the_geomRoad"=lg )
loop
m:=0;
PointForLinge[m]:=pt;
m:=m+1;
END loop;
if array_length(PointForLinge,1)> 0 then 
for i in 0 .. array_length(PointForLinge,1)
LOOP
tabfloat[i]:=ST_Line_Locate_Point(lg,PointForLinge[i]) ;-- c'est le tableau de float que je veux le retourner
 End LOOp
 end if;
 END LOOP;
return tabfloat; --ici le pbl
 end
 $$
 LANGUAGE 'plpgsql';

et voici l'erreur que je le trouve

RETURN ne peut pas avoir un paramètre dans une fonction renvoyant un ensemble
LINE 30: return tabfloat;   

merci de l'aide

#11 Re : PL/pgSQL » Select in (select) on postgresql » 14/03/2013 16:55:50

oui rien à changé avec les parenthèses, le meme message d'erreur!!

#13 PL/pgSQL » Select in (select) on postgresql » 14/03/2013 14:13:33

inesjg
Réponses : 5

Bonjour
J'ai essayer d’écrire une requête dans postgresql sous la forme suivante:
'select nom,prenom from personne where age in select id from age'
il renvoie une erreur "l'opérateur de comparaison de ligne ne doit pas renvoyer un ensemble "
alors comment je peut  écrire in select dans le clause where en postgresql 
merci d'avance

Pied de page des forums

Propulsé par FluxBB