Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 mer. 16 mai 2018 12:33

DESTOUCHESJESSY
Membre
Date d'inscription: 4 nov. 2015
Messages: 3

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 dim. 20 mai 2018 19:36

Bruno
Membre du bureau
Lieu: Paris
Date d'inscription: 22 juin 2005
Messages: 9736
Site web

Re: Mise a jour de champs via Trigger

Par ici SVP wink

Hors ligne

 

#3 jeu. 24 mai 2018 22:55

Lsam
Membre
Date d'inscription: 27 nov. 2013
Messages: 114

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

Partagez  |