bonjour,
j'ai deux tables : espece
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.--------------------------------------
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
...
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
la fonction s'exécute mais, elle n' insère dans la table statistique qu'une seule ligne .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 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); RETURN NEXT t ; END LOOP; RETURN NEXT r; END LOOP; RETURN; END $BODY$ LANGUAGE 'plpgsql' ; select * from stat()
Merci
Partager