PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 08/04/2020 21:39:20

HeadTrick24
Membre

Fonction / déclencheur entre 2 tables

Bonjour, étant novice dans les fonctions / déclencheurs, je sollicite vos compétences.
J'ai des tables, "za_pm" qui est un polygone et "adresse" qui est un point.
Ces deux tables ont un champ "nom_pm".
Les points de la table adresse se trouve géométriquement dans les polygones de la table za_pm.
Comment remplir automatiquement le champ "nom_pm" de la table adresse par le champ "nom_pm" de la table za_pm.
Merci :-)

Hors ligne

#2 08/04/2020 23:44:17

HeadTrick24
Membre

Re : Fonction / déclencheur entre 2 tables

J'ai trouvé mon bonheur en fouillant sur le net, mais mon champ se remplit quand je crée de nouvelles entités dans la table adresse. Celles déjà présentes ne se mettent pas à jour.
Voici mon code


CREATE OR REPLACE FUNCTION public.nompm_func()
  RETURNS trigger AS
$BODY$
BEGIN
    select into NEW.nom_pm nom_pm from za_pm where st_within(NEW.geom, geom);
    return NEW ;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.nompm_func()
  OWNER TO postgres;


CREATE TRIGGER nompm
  BEFORE INSERT OR UPDATE OF pm
  ON public.suivi_immeuble
  FOR EACH ROW
  EXECUTE PROCEDURE public.nompm_func();

Hors ligne

#3 09/04/2020 08:58:34

jmarsac
Membre

Re : Fonction / déclencheur entre 2 tables

Bonjour,

Je ne comprends pas, votre trigger se déclenche lors d'un INSERT/UPDATE de la table "suivi_immeuble" mentionnant la colonne "pm"...
D'après votre explication ce serait plutôt

CREATE TRIGGER nompm
  BEFORE INSERT OR UPDATE OF geom
  ON public.adresse
  FOR EACH ROW
  EXECUTE PROCEDURE public.nompm_func();

Hors ligne

#4 09/04/2020 22:43:14

HeadTrick24
Membre

Re : Fonction / déclencheur entre 2 tables

Bonjour,
effectivement c'est bien public.adresse

Par contre les entités déjà existantes ne se mettent pas à jour.

Hors ligne

#5 09/04/2020 23:19:49

jmarsac
Membre

Re : Fonction / déclencheur entre 2 tables

L'appel de la fonction "nompm_func" est déclenché sur un INSERT ou un UPDATE. Donc, la colonne "nom_pm" d'une entité existante n'est mise à jour que si vous modifiez sa géométrie (colonne "geom")

Hors ligne

#6 10/04/2020 07:18:12

HeadTrick24
Membre

Re : Fonction / déclencheur entre 2 tables

Merci :-)

Hors ligne

Pied de page des forums