banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB