IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Calcul de longueurs automatisée [9.6]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Calcul de longueurs automatisée
    Bonjour,

    Je souhaiterais créer un trigger pour calculer automatiquement les longueurs de mes polylignes lors des mises à jours.

    J'ai utilisé un code mais cela ne fonctionne pas

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE FUNCTION champ_longueur() RETURNS trigger AS
    $BODY$
     
    BEGIN
    NEW.LENGTH := ST_Length(NEW.geom);
    RETURN NEW;
    END;
     
    $BODY$
    LANGUAGE plpgsql;
     
    CREATE TRIGGER maj_champ_longueur
    BEFORE INSERT OR UPDATE ON lignes
    FOR EACH ROW EXECUTE PROCEDURE champ_longueur();


    Lors de modifications sous QGIS, j'ai un message d'erreur et pas de mise à jour

    Je recois ce message d'erreur :

    Impossible de valider les changements pour la couche lignes

    Erreurs : ERREUR : 1 géométrie non-modifiée.

    Erreur du fournisseur de données :
    Erreur PostGIS lors de la modification de géométrie : ERREUR: l'enregistrement « new » n'a pas de champs « length »
    CONTEXT: fonction PL/pgsql champ_longueur(), ligne 4 à affectation

  2. #2
    Membre à l'essai
    Homme Profil pro
    Géomaticien en Télécom
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Géomaticien en Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bon finalement trouvé :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    -- mise en place du Trigger champ longueur
    CREATE OR REPLACE FUNCTION champ_longueur() RETURNS trigger AS
    $BODY$
     
    BEGIN
    NEW.long := ST_Length(new.geom);
    RETURN NEW;
    END;
     
    $BODY$
    LANGUAGE plpgsql;
     
    -- Activation du trigger dans la couche
    CREATE TRIGGER maj_champ_longueur
    BEFORE INSERT OR UPDATE ON lignes
    FOR EACH ROW EXECUTE PROCEDURE champ_longueur();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de longueur
    Par sause dans le forum Mathématiques
    Réponses: 6
    Dernier message: 04/04/2012, 15h24
  2. Calcul de longueur
    Par sky-mars dans le forum MATLAB
    Réponses: 16
    Dernier message: 13/08/2009, 09h03
  3. Réponses: 3
    Dernier message: 04/10/2006, 15h15
  4. Réponses: 5
    Dernier message: 31/07/2006, 15h42
  5. Calculer la longueur d'une variable de type entier
    Par juliendeparis dans le forum C
    Réponses: 13
    Dernier message: 08/06/2006, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo