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

SQL Procédural MySQL Discussion :

Probleme de TRIGGER


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut Probleme de TRIGGER
    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.

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    En fait le problème se situe au niveau des "or" du trigger !
    Quelqu'un aurait-il une idée pour résoudre ce problème car moi je ne comprend pas pourquoi cela créé des erreurs.
    J'ai la version 5 de mysql.

    Merci

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Citation Envoyé par Aide MySQL
    trigger_event indique le type de commande qui active le déclencheur. Il peut valoir INSERT, UPDATE ou DELETE
    Bref, c'est l'un ou l'autre des événements qui peut figurer dans la déclaration, pas tous
    http://dev.mysql.com/doc/refman/5.0/...e-trigger.html

    De plus,
    Citation Envoyé par Aide MySQL
    Note : actuellement, les déclencheurs ont les mêmes limitations que les procédures stockées : ils ne peuvent pas contenir de références directes aux tables via leur nom.
    Ce qui semble être le cas dans ton script...

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

Discussions similaires

  1. probleme de trigger
    Par [ME]yeye dans le forum Oracle
    Réponses: 6
    Dernier message: 15/06/2006, 15h33
  2. Problème comportement trigger
    Par ameno_123 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 04/05/2006, 00h20
  3. Probleme de trigger
    Par Lomme dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 09/03/2006, 10h39
  4. Probleme de trigger
    Par luciemacherie dans le forum Oracle
    Réponses: 4
    Dernier message: 16/01/2006, 17h21
  5. [JDBC]Probleme avec trigger Oracle
    Par aurel89 dans le forum JDBC
    Réponses: 2
    Dernier message: 02/08/2005, 11h53

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