Pages: 1
- Sujet précédent - Trigger sur évènement UPDATE mais sur le dernier objet modifié - Sujet suivant
#1 Tue 25 January 2022 16:14
- LAFONT40
- Juste Inscrit !
- Date d'inscription: 5 Sep 2012
- Messages: 5
Trigger sur évènement UPDATE mais sur le dernier objet modifié
Bonjour,
Je galère sur l'écriture d'un trigger.
J'ai des triggers dans ma base PostgreSQL/Postgis qui me permettent de mettre à jour un certain nombre de champs.
Pour ce faire j'ai 2 procédures dans le trigger :
1 fonction sur "INSERT", 1 fonction sur modification géométrique, et je souhaiterais une fonction me permettant de jouer le trigger que si le champ "nom" est modifié.
Pouvez vous m'aider ??
merci d'avance
BEGIN
--- Mise à jour par Trigger sur INSERT---
IF TG_OP = 'INSERT' THEN
UPDATE batim_batimentlocalise
SET (communeinsee,commune,groupement,departement,dernieremodifdate,dernieremodifheure) = (SELECT communeinsee,commune,groupement,departement,CURRENT_DATE,CURRENT_TIME FROM terri_commune WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), terri_commune.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (plandeploiement) = (SELECT nom FROM terri_secteurops WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie),terri_secteurops.geometrie)LIMIT 1) WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlaszoom) = (SELECT nom FROM Carroyage_200m_landes WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_200m_landes.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlascoordonnees) = (SELECT nom FROM Carroyage_foret_dptal WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_foret_dptal.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
RETURN NEW;
END IF;
--- Mise à jour par Trigger sur modification géographique---
IF ST_EQUALS(NEW.geometrie, OLD.geometrie) IS FALSE THEN
UPDATE batim_batimentlocalise
SET (communeinsee,commune,groupement,departement,dernieremodifdate,dernieremodifheure,modificateur) = (SELECT communeinsee,commune,groupement,departement,CURRENT_DATE,CURRENT_TIME,CURRENT_USER FROM terri_commune WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), terri_commune.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (plandeploiement) = (SELECT nom FROM terri_secteurops WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie),terri_secteurops.geometrie)LIMIT 1) WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlaszoom) = (SELECT nom FROM Carroyage_200m_landes WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_200m_landes.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlascoordonnees) = (SELECT nom FROM Carroyage_foret_dptal WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_foret_dptal.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
RETURN NEW;
END IF;
RETURN NEW;
END;
Hors ligne
#2 Wed 26 January 2022 10:01
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: Trigger sur évènement UPDATE mais sur le dernier objet modifié
Bonjour.
Pour l'appel d'un trigger sur la modification d'un attribut il faut spécifier cette colonne lors de la création du trigger.
Dans votre cas :
Code:
CREATE TRIGGER montrigger BEFORE INSERT OR UPDATE OF nom ON matable FOR EACH ROW EXECUTE PROCEDURE mafonctiontrigger();
Enfin, si j'ai bien compris votre problème.
Si vous modifiez une autre table ( UPDATE batim_batimentlocalise) que la table appelant le trigger, alors il faudra remplacer le before par after
Par contre je suis surpris de voir que vous placez des RETURN NEW un peu partout. Pour ma part je n'en mets qu'un seul à la fin de ma fonction trigger, juste avant le ENd;$Body$
Cordialement
JP
Dernière modification par JP LLORENS (Wed 26 January 2022 10:09)
Hors ligne
#3 Wed 26 January 2022 13:18
- LAFONT40
- Juste Inscrit !
- Date d'inscription: 5 Sep 2012
- Messages: 5
Re: Trigger sur évènement UPDATE mais sur le dernier objet modifié
Merci pour votre réponse je vais tester votre proposition
Hors ligne
#4 Wed 26 January 2022 13:41
- LAFONT40
- Juste Inscrit !
- Date d'inscription: 5 Sep 2012
- Messages: 5
Re: Trigger sur évènement UPDATE mais sur le dernier objet modifié
Cela fonctionne, merci beaucoup pour votre aide
Hors ligne
Pages: 1
- Sujet précédent - Trigger sur évènement UPDATE mais sur le dernier objet modifié - Sujet suivant