Message posté par : LAFONT40
----------------------------------------
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;
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=349714#p349714
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net