Bonjour,

J'ai un petit problème avec la création d'un trigger. J'ai recherché sur le net mais je ne trouve pas d'exemple ressemblant à ce que je veux faire (enfin j'en ai trouvé un mais bizarrement, chez moi ça fonctionne pas !)

Voici mon code :

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
CREATE TABLE ENE_SNAP_02_01_10 AS (SELECT SIRET,CCM,COMMUNE,
IF (S.EFFECTIF<> "N",R.VALUE*S.EFFECTIF,0) AS E14,
IF (S.EFFECTIF<> "N",R1.VALUE*S.EFFECTIF,0) AS E15, 
IF (S.EFFECTIF<> "N",R2.VALUE*S.EFFECTIF,0) AS E16,
IF (S.EFFECTIF<> "N",R3.VALUE*S.EFFECTIF,0) AS E17
FROM SRC S, RAT R, RAT R1, RAT R2, RAT R3 
WHERE R.VAR="C14" AND R1.VAR="C15" AND R2.VAR="C16" AND R3.VAR="C17" AND SNAP="02 01 10");
 
DELIMITER $$
CREATE OR REPLACE TRIGGER MAJ_SRC AFTER INSERT OR UPDATE OR DELETE ON SRC
FOR EACH ROW
BEGIN
IF INSERTING THEN
BEGIN
INSERT INTO ENE_SNAP_02_01_10 SELECT NEW.SIRET,NEW.CCM,NEW.COMMUNE,R.VALUE*NEW.EFFECTIF,R1.VALUE*NEW.EFFECTIF,R2.VALUE*NEW.EFFECTIF,R3.VALUE*NEW.EFFECTIF FROM ENE_SNAP_02_01_10, RAT R, RAT R1,RAT R2,RAT R3 WHERE R.VAR="C14" AND R1.VAR="C15" AND R2.VAR="C16" AND R3.VAR="C17";
exception
when dup_val_on_index then
BEGIN
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E14=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C14" AND SIRET=NEW.SIRET;
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E15=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C15" AND SIRET=NEW.SIRET;
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E16=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C16" AND SIRET=NEW.SIRET;
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E17=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C17" AND SIRET=NEW.SIRET;
END;
END;
ELSEIF UPDATING THEN
BEGIN
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E14=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C14";
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E15=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C15";
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E16=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C16";
UPDATE ENE_SNAP_02_01_10 ,RAT SET ENE_SNAP_02_01_10.E17=RAT.VALUE*NEW.EFFECTIF WHERE ENE_SNAP_02_01_10.SIRET=OLD.SIRET AND RAT.VAR="C17";
END;
ELSEIF DELETING THEN
BEGIN
DELETE FROM ENE_SNAP_02_01_10 WHERE SIRET=OLD.SIRET;
END;
END IF;
END$$
Voici l'erreur qui m'est renvoyée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRIGGER MAJ_SRC AFTER INSERT OR UPDATE OR DELETE ON SRC
FOR EACH ROW
BEGIN
IF IN' at line 1
Merci de votre aide.