#1 Fri 22 January 2010 11:02
- solom7
- Juste Inscrit !
- Date d'inscription: 15 Jan 2010
- Messages: 3
inserstion avec fonction
bonjour,
j'ai deux tables : espece
--------------------------------------
ID| esp | fct | facteur1 | facteur 2
--------------------------------------
1 A F1 5 3
2 A F2 6 2
3 A F3 5 0
4 B F1 1 3
5 B F2 1 6
6 B F3 1 0
et la table 2 : maille
--------------------------------------------
codemaille | the_geom | facteur1 | facteur 2
--------------------------------------------
1 xx 5 3
2 yy 1 3
3 tt 5 0
4 gg 1 3
5 hh 1 6
6 nn 1 0
7 uu 5 3
8 rr 1 3
9 as 5 0
10 dr 1 3
11 vc 1 6
12 wx 1 0
...
et je veux faire des statistiques (genre combien d'espèce dans chaque maille ?, ou fonction /maille ? ....) que je vais visualiser après sous SIG.
donc l'idee est de créer une grande table statistique, dans la quelle je vais insérer ( code de la maille ,the_geom, esp, Fct) chaque fois les deux conditions : espece.facteur1=maille.facteur1 AND espece.facteur2=maille.facteur2 sont satisfaites.
ce test sera réalisé pour chaque ligne de la table espèce. cette table dite statistique sera interrogée et en faisant un group by code maille on peut déterminer le nbre d'espèce par maille ..../
pour faire j'ai créer une fonction stat qui permet de récupérer la ligne de la table espèce ensuite chercher dans la table maille les codes mailles qui répondent aux conditions et enfin alimenter la table statistique.
voila le code
Code:
CREATE OR REPLACE FUNCTION stat() RETURNS SETOF espece AS $BODY$ DECLARE r espece%rowtype; t maillec%rowtype; BEGIN FOR r IN SELECT * FROM espece WHERE id > 0 LOOP FOR t IN SELECT * FROM maille WHERE t.facteur1=r.facteur2 AND t.facteur2=r.facteur2 LOOP INSERT INTO statistique (codemaille, the_geom, esp, fct) VALUES (t.codemaille,t.the_geom, r.esp,r.fct); END LOOP; RETURN NEXT r; END LOOP; RETURN; END $BODY$ LANGUAGE 'plpgsql' ; select * from stat()
la fonction s'exécute mais, elle n' insère dans la table statistique qu'une seule ligne .
Merci
Hors ligne
#2 Fri 22 January 2010 15:26
- solom7
- Juste Inscrit !
- Date d'inscription: 15 Jan 2010
- Messages: 3
Re: inserstion avec fonction
il faut remplacer le code
Code:
FOR t IN SELECT * FROM maille WHERE t.facteur1=r.facteur2 AND t.facteur2=r.facteur2
par
Code:
FOR t IN ( SELECT * FROM maille WHERE t.facteur1=r.facteur2 AND t.facteur2=r.facteur2 )
sinon j'ai une solution proposée sur le site http://www.developpez.net/forums/d86634 … ost4939398 il n'as pas besoin de faire une fonction, une requête de genre fait le meme travail :
Code:
INSERT INTO statistique (codemaille, the_geom, esp, fct) SELECT t.codemaille,t.the_geom, r.esp,r.fct FROM maille AS t, espece AS r WHERE t.facteur1=r.facteur1 AND t.facteur2=r.facteur2 AND r.id>0
merci estofilo sur developpez.net
Hors ligne