Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trigger multiple

Sujet résolu
    17 mars 2011 à 19:39:34

    Bonsoir à tous,

    Je tente de créer un trigger multiple, je veux dire par là avec 2 évènements possible
    Voici le trigger en question qui pour l'instant me génère une erreur lorsque je tente de l'exécuter.
    Je précise que j'exécute la requête dans phpmyadmin directement et que je spécifie comme délimiteur: //

    Merci d'avance :)

    DROP TRIGGER IF EXISTS carrieres//
    CREATE TRIGGER carrieres
    BEFORE INSERT OR DELETE ON emplois
    FOR EACH ROW
    BEGIN
       IF INSERTING THEN
           UPDATE carrieres SET debauche = CURDATE() WHERE pID = NEW.pID AND debauche = '0000-00-00';
           INSERT INTO carrieres (pID, eID, fID, gID, salaire, embauche) VALUES (NEW.pID, NEW.eID, NEW.fID, NEW.gID, NEW.salaire, NOW());
       END IF;
       IF DELETING THEN
          UPDATE carrieres SET debauche = CURDATE() WHERE pID = OLD.pID AND debauche = '0000-00-00';
       END IF;
    END//
    


    Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause.

    ERROR: Ponctuation invalide @ 33
    STR: //
    SQL: DROP TRIGGER IF EXISTS carrieres//# MySQL n'a retourné aucun enregistrement.

    CREATE TRIGGER carrieres
    BEFORE INSERT OR DELETE ON emplois
    FOR EACH ROW
    BEGIN
    IF INSERTING THEN
    UPDATE carrieres SET debauche = CURDATE() WHERE pID = NEW.pID AND debauche = '0000-00-00';
    INSERT INTO carrieres (pID, eID, fID, gID, salaire, embauche) VALUES (NEW.pID, NEW.eID, NEW.fID, NEW.gID, NEW.salaire, NOW());
    END IF;
    IF DELETING THEN
    UPDATE carrieres SET debauche = CURDATE() WHERE pID = OLD.pID AND debauche = '0000-00-00';
    END IF;
    END//
    CREATE TRIGGER carrieres
    BEFORE INSERT OR DELETE ON emplois
    FOR EACH ROW
    BEGIN
    IF INSERTING THEN
    UPDATE carrieres SET debauche = CURDATE() WHERE pID = NEW.pID AND debauche = '0000-00-00';
    INSERT INTO carrieres (pID, eID, fID, gID, salaire, embauche) VALUES (NEW.pID, NEW.eID, NEW.fID, NEW.gID, NEW.salaire, NOW());
    END IF;
    IF DELETING THEN
    UPDATE carrieres SET debauche = CURDATE() WHERE pID = OLD.pID AND debauche = '0000-00-00';
    END IF;
    END//


    requête SQL:

    CREATE TRIGGER carrieres BEFORE INSERT OR DELETE ON emplois FOR EACH ROW BEGIN IF INSERTING THEN UPDATE carrieres SET debauche = CURDATE() WHERE pID = NEW.pID AND debauche = '0000-00-00'; INSERT INTO carrieres (pID, eID, fID, gID, salaire, embauche) VALUES (NEW.pID, NEW.eID, NEW.fID, NEW.gID, NEW.salaire, NOW()); END IF; IF DELETING THEN UPDATE carrieres SET debauche = CURDATE() WHERE pID = OLD.pID AND debauche = '0000-00-00'; END IF; END//

    MySQL a répondu:Documentation
    #1064 - 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 'OR DELETE ON emplois
    FOR EACH ROW
    BEGIN
    IF INSERTING THEN
    UPDATE c' at line 2
    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2011 à 20:07:22

      Tu ne peux pas créer un trigger sur deux events (INSERT et DELETE). Il en faut un pour chaque. (ce qui d’ailleurs serait plus logique puisque tu veut faire deux traitements différents en fonction de l'event)
      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2011 à 20:46:22

        J'ai pourtant cru comprendre que c'était possible et que les conditions permettaient d'identifier l'évènement justement...
        Bon bah j'ai plus qu'à faire 2 triggers alors. Merci pour ton aide.
        • Partager sur Facebook
        • Partager sur Twitter
          17 mars 2011 à 20:50:35

          Oui c'est possible, mais pas avec MySQL.
          • Partager sur Facebook
          • Partager sur Twitter
            17 mars 2011 à 20:54:43

            Ah c'était pour ça, le document que j'avais lu ne faisait pas mention du SGBD.
            • Partager sur Facebook
            • Partager sur Twitter

            Trigger multiple

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown