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 :

Postgresql et les Trigger !


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Postgresql et les Trigger !
    Bonjour,

    Tout d'abord avant de poser le problème : longue vie a PostgreSQL et merci aux gens le faisant vivre.

    Je suis confronté aux trigger et après avoir passé une journée à fouiller l'ensemble ? du web je viens à la source pour que l'on puisse m'aider afin d'éviter le suicide ...

    Je suis apprenti Sigiste et l'on me demande ceci : Attention accrochez vous c'est parti !


    Petite présentation : Je possède 3 tables : att_affaires; pt_communes; itg_pt_affaire_22


    ->La table att_affaires listes des travaux

    Code : 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
    CREATE TABLE att_affaires
    (
      idaff integer NOT NULL,
      insee integer,
      numaff character(6),
      typeaff character(1),
      annee character(4),
      intitule character(250),
      maitre_oeuvre character(250),
      mission character(250),
      mtestiminitial numeric(20,2),
      mtfininit numeric(20,2),
      mtfindef numeric(20,2),
      CONSTRAINT pk_att_affaires_idaff PRIMARY KEY (idaff)
    )
    WITH (OIDS=FALSE);
    ->La table pt_communes liste toutes les communes d'un département.


    Code : 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
    17
    18
    CREATE TABLE pt_commune
    (
      code_insee character varying(255),
      etq_geoconcept character varying(255),
      etq_intrageo character varying(255),
      identifiant integer NOT NULL,
      insee_num integer,
      nom character varying(255),
      geometrie geometry,
      siren_epci integer,
      idpays integer,
      siren integer,
      idcanton integer,
      CONSTRAINT pk_pt_commune PRIMARY KEY (identifiant),
      CONSTRAINT enforce_dims_geometrie CHECK (ndims(geometrie) = 2),
      CONSTRAINT enforce_srid_geometrie CHECK (srid(geometrie) = 27572)
    )
    WITH (OIDS=FALSE);
    ->La table itg_affaire_22 permet de rassembler l'affaire liée à la commune

    Code : 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
    17
    18
     
    CREATE TABLE itg_affaires_pt_22
    (
      nom character varying(255),
      geometrie geometry,
      idaff integer NOT NULL,
      insee character varying,
      numaff character(6),
      typeaff character(1),
      annee character(4),
      intitule character(250),
      maitre_oeuvre character(250),
      mission character(250),
      mtestiminitial numeric(20,2),
      mtfininit numeric(20,2),
      mtfindef numeric(20,2)
    )
    WITH (OIDS=FALSE);

    Le tout permet par la suite de représenter géographiquement les affaires sur les communes (on peut imaginer par la suite compter le nombre d'affaires...)




    Ce que je dois faire (avec votre aide ) :=)



    Lorsque qu'il y dans la table pt_affaires à soit :

    ->Une modification sur une ou plusieurs lignes
    ->Un delete sur une ou plusieurs lignes
    ->Un insert into sur une ou plusieurs lignes

    Je dois mettre à jour automatiquement par un trigger (déclencheur) sur la table att_affaires (si vous suivez ) la table itg_affaires_22


    ALors j'ai bien essayé ceci : pour l'insert into :

    CREATE OR REPLACE FUNCTION trig_insert()

    RETURNS "trigger" AS

    $BODY$DECLARE


    BEGIN

    INSERT INTO itg_affaires_pt_22 ( nom, geometrie, idaff, insee, numaff, typeaff, annee, intitule, maitre_oeuvre, mission,mtestiminitial, mtfininit, mtfindef )
    SELECT nom, geometrie, idaff, insee, numaff, typeaff, annee, intitule, maitre_oeuvre, mission,mtestiminitial, mtfininit, mtfindef
    FROM pt_commune, att_affaires
    where pt_commune.code_insee = att_affaires.insee and id1 = new.id1 AND id2 = new.id2;

    END;

    $BODY$

    LANGUAGE 'plpgsql' VOLATILE;
    Avec ceci :

    CREATE TRIGGER test_insert

    BEFORE INSERT

    ON att_affaires
    FOR EACH ROW

    EXECUTE PROCEDURE trig_insert();
    Cependant rien ne se passe. Si quelqu'un peut me venir en aide me donner les bons tuyaux je lui serait très reconnaissant


    Bonne journée et bonne continuation.

    Loïc.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Pour un trigger BEFORE par ligne modifiée, normalement il est indispensable de retourner la ligne.
    Ajoute donc RETURN NEW; à la fin de la fonction trig_insert()

Discussions similaires

  1. phpPgAdmin et les triggers
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/06/2011, 18h41
  2. Les Triggers et application externes
    Par Rahustro dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 16/02/2005, 13h53
  3. Question urgente sur les triggers
    Par devdev dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/11/2004, 10h38
  4. PostGreSQL et les fonctionnalités spatiales
    Par luta dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/05/2004, 17h29
  5. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28

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