#1 Wed 16 May 2018 12:33
- DESTOUCHESJESSY
- Juste Inscrit !
- Date d'inscription: 4 Nov 2015
- Messages: 5
Mise a jour de champs via Trigger
Bonjour,
Je travaille en ce moment sur deux le réseau ftth, je dispose de deux couches Shp "zasro" (Zone Arrière de SRO) et "zanro" (Zone Arrière de NRO) avec un code d'identification unique pour chaque zone.
Une "zanro" contient plusieurs "zasro".
CODE "zanro" 'NRO-54-028' contient CODE "zasro" 'SRO-54-028-380'
CODE "zasro" 'SRO-54-028-381' etc..
J'aimerais compléter un champs 'erreur_code' dans la table attributaire "zasro" via un trigger en fonction
de l'emplacement géographique de chaque "zasro" a sa "zanro" et renvoyer 'erreur' a chaque fois que le code n'est pas bon (Si une "zasro" est dans la zone de "zanro" 'NRO-54-028' et n'est pas nommée 'SRO-54-028...', il faut remonter une erreur car mal codé)
Avez vous Une idée ?
Je débute en code SQL.
Merci.
Hors ligne
#2 Sun 20 May 2018 19:36
En ligne
#3 Thu 24 May 2018 22:55
- Lsam
- Participant assidu
- Date d'inscription: 27 Nov 2013
- Messages: 157
Re: Mise a jour de champs via Trigger
Bonsoir,
Il vous faut d'abord créer une fonction assurant la mise à jour automatique de nouveaux champs (à créer auparavant) :
- code_zanro_deduit : code zanro déduit du code zasro
- code_zanro_geoloca : code zanro de la zanro contenant la zasro
- statut : champ pour le code erreur
Voici ce qu'on peut faire sur une base PostgreSQL/PostGIS.
Par exemple (à adapter bien-sûr en fonction de vos noms de tables et de champs) :
Code:
CREATE OR REPLACE FUNCTION zanro_vs_zasro() RETURNS trigger AS $$ BEGIN NEW.code_zanro_deduit := (select replace(substring(code_zasro from 1 for 10),'S','N') from zasro) ; RETURN NEW ; NEW.code_zanro_geoloca := (select code_zanro from zanro where st_contains(zanro.geometry,zasro.geometry)) ; RETURN NEW ; IF NEW.code_zanro_deduit <> NEW.code_zanro_geoloca THEN NEW.statut = 'ERREUR !' RETURN NEW ; ELSE NEW.statut = 'OK' RETURN NEW ; END IF ; END $$ LANGUAGE plpgsql VOLATILE ;
Voir si les RETURN NEW sont bien placés.
Puis il faut créer un déclencheur pour par exemple exécuter la fonction précédente à chaque ajout ou modification du champ code_zasro dans la table zasro :
Code:
CREATE TRIGGER update_code_zanro BEFORE INSERT OR UPDATE OF code_zasro ON zasro FOR EACH ROW EXECUTE PROCEDURE zanro_vs_zasro() ;
Hors ligne