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
->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 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 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 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);
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 :
Avec ceci :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;
Cependant rien ne se passe. Si quelqu'un peut me venir en aide me donner les bons tuyaux je lui serait très reconnaissantCREATE TRIGGER test_insert
BEFORE INSERT
ON att_affaires
FOR EACH ROW
EXECUTE PROCEDURE trig_insert();
Bonne journée et bonne continuation.
Loïc.
Partager