Vous n'êtes pas identifié(e).
Pages : 1
Merci je vais tester
Bonjour
Merci pour vos réponse, le trigger fonctionne avec un return merci du coup de main !
Cependant je suis confronté à un autre problème.
Mon trigger est sur une action delete et va faire un delete de tout une autre table.
Cependant en terme de rapidité (vu qu'il y à de nombreuse ligne) à chaque fois qu'il y à un delete sur la table1 il refait un delete sur la table2.
J'aimerais donc pouvoir appliquer une condition qui dit que si ma table 2 est vide alors tu ne fais pas le delete *
DECLARE
num integer;
BEGIN
IF itg_affaires_pt.numaff IS NOT NULL THEN
delete from itg_affaires_pt;
return OLD;
ELSE
EXIT;
END IF;
END;
J'ai essayé plusieurs choses sans succès pouvez vous me venir en aide ?
Cordialement
Loïc.
Bon c'est résolu je passe par un update
Bonne journée !
Bonjour,
Second problème
Je souhaite faire un insert into avec une jointure qui fonctionne seulement le problème est qu'il y à une contrainte sur la clé primaire et que par conséquent cela m'insulte !
Voici la requete :
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
J'ai lu sur des forum que l'on pouvait peut être utiliser cette commande :
ON DUPLICATE KEY UPDATE idaff=idaff
Cependant je n'arrive pas à lui faire manger le vilain !
Bonjour,
Oui simple erreur d'écriture je modifie.
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
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.
REATE 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
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 ROWEXECUTE 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.
Pages : 1