Pages: 1
- Sujet précédent - Postgresql/Postgis Procédure TRIGGER : calcul surface disponible - Sujet suivant
#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
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
Pages: 1
- Sujet précédent - Postgresql/Postgis Procédure TRIGGER : calcul surface disponible - Sujet suivant