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 10 May 2013 12:21

jordan.legoff
Participant occasionnel
Date d'inscription: 27 Jan 2011
Messages: 12

Postgresql/Postgis Procédure TRIGGER : calcul surface disponible

Bonjour chers homologues géomaticiens,

J'aurai besoin de quelques conseils sur la mise en place d'une procédure Trigger, en esperant que mes explications seront assez claires.

Voici mon objectif:

J'ai deux tables:

- parc_activite
- lots

J'ai un champ "surf_dispo" dans ma table "parc_activite" qui est vide. Je souhaiterai que celui-ci puisse se mettre à jour automatiquement(lors d'une insertion ou d'une modification) en utilisant une procédure trigger.
Ce champ doit correspondre à la soustraction entre la surface totale du parc d'activité - la somme des surfaces des lots considérés comme "vendus"(par parc d'activité). Cette valeur doit également être mise à jour lorsqu'on modifie la surface d'un parc d'activité et/ou d'un lot considéré comme vendu.
Ce champ fait donc appel à deux tables différentes.

J'ai auparavant créé une autre fonction trigger me permettant de calculer la surface de mon parc d'activité à chaque insertion ou mise à jour:

CREATE OR REPLACE FUNCTION calcul_surf_parc()

RETURNS "trigger" AS $$
    BEGIN
        NEW.surf_tot= round(CAST (area(NEW.geom) AS numeric),0);
        RETURN NEW;
    END;
$$
LANGUAGE 'plpgsql'VOLATILE;



CREATE TRIGGER calcul_surf_parc BEFORE INSERT OR UPDATE
ON sig.parc_activite FOR EACH ROW
EXECUTE PROCEDURE calcul_surf_parc();



Cependant, ce que je souhaite faire maintenant est plus délicat, car je fais appel à deux tables...
Auriez vous quelques pistes afin de résoudre mon problème?

Bien à vous.

Jordan.

Dernière modification par jordan.legoff (Fri 10 May 2013 13:39)

Hors ligne

 

#2 Mon 13 May 2013 15:08

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Postgresql/Postgis Procédure TRIGGER : calcul surface disponible

Bonjour,

Il faudrait définir deux triggers:
1 sur la table parc_activite qui recalcule la surf_dispo lorsque les champs geom ou surf_totale sont changés
1 sur la table lots qui met a jour le champ surf_dispo de parc_activité qd la geometrie d'un lot.

Nicolas

Hors ligne

 

#3 Mon 13 May 2013 16:35

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Postgresql/Postgis Procédure TRIGGER : calcul surface disponible

Par exemple (non testé !)

Code:

-- fonction pour la surface dispo
CREATE OR REPLACE FUNCTION calcul_surf_dispo() RETURNS "trigger" AS $$
    DECLARE surf_lot double precision := 0.0;
    BEGIN
        SELECT sum(st_area(geom)) from lots 
        where vendu 
        and lots.id_parc = NEW.id
        into surf_lot;
        NEW.surf_dispo= NEW.surf_totale - surf_lot;
        RETURN NEW;
    END;
$$
LANGUAGE 'plpgsql'VOLATILE;

-- fonction pour la mise a jour de la table lots:
CREATE OR REPLACE FUNCTION update_act_from_lot() RETURNS "trigger" AS $$
    DECLARE surf_lot double precision := 0.0;
    BEGIN
        SELECT sum(surf) from lots
        where vendu and id = NEW.id 
        into surf_lot;
        update parc_activite set surf_dispo = surf_totale - surf_lot
        where id = OLD.id_parc;
        RETURN NEW;
    END;
$$
LANGUAGE 'plpgsql'VOLATILE;

-- La définition du trigger pour la table lot: un mode AFTER est suffisant: pas de mise a jour de la table elle-meme.
drop trigger update_act_from_lot on lot;
CREATE TRIGGER update_act_from_lot AFTER INSERT OR UPDATE
ON lots FOR EACH ROW
EXECUTE PROCEDURE update_act_from_lot();

Nicolas

Hors ligne

 

#4 Tue 14 May 2013 08:38

jordan.legoff
Participant occasionnel
Date d'inscription: 27 Jan 2011
Messages: 12

Re: Postgresql/Postgis Procédure TRIGGER : calcul surface disponible

Merci Nicolas pour ta réponse, je vais réessayer dés que possible de mettre en œuvre tes propositions.

Pour contourner le problème j'ai créé une vue sous Postgis qui fonctionne très bien.

Jordan Le Goff

Hors ligne

 

#5 Tue 14 May 2013 09:19

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Postgresql/Postgis Procédure TRIGGER : calcul surface disponible

jordan.legoff a écrit:

Merci Nicolas pour ta réponse, je vais réessayer dés que possible de mettre en œuvre tes propositions.

Pour contourner le problème j'ai créé une vue sous Postgis qui fonctionne très bien.

Jordan Le Goff


Bonjour,

Ah oui, ca c'est encore mieux !

Nico

Hors ligne

 

Pied de page des forums

Powered by FluxBB