banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

Bruno
Membre du bureau
Lieu: Toulouse
Date d'inscription: 22 Jun 2005
Messages: 11959
Site web

Re: Mise a jour de champs via Trigger

Par ici SVP wink

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

 

Pied de page des forums

Powered by FluxBB