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 :

Triggers sur on update sans updater


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Triggers sur on update sans updater
    Bonjour à tous,

    Bon, le titre est un peu tordu mais voilà ce que je veux faire :

    Sur l'update d'une colonne, je veux :

    - enregistrer la nouvelle valeur de la ligne dans une autre base de données
    - revenir à l'état précédent sur la base en cours.

    Je veux donc que les modifications sur la base en cours ne ne fasse pas quand on demande l'update mais ce fasse sur l'autre base... Enregister sans enregistrer

    Voilà un trigger qui marche... sauf la dernière ligne puisque j'essaye de faire un update sur l'enregistrement qui exécute le trigger :

    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
     
    DELIMITER $$
     
    CREATE TRIGGER brouillon AFTER UPDATE ON spectacles
     
    FOR EACH ROW BEGIN
     
    IF ((NEW.publish = '1') AND (OLD.publish = '0')) THEN
     
    #suppressions
    #spectacles
    DELETE FROM yvestest_draft.spectacles WHERE yvestest_draft.spectacles.idspectacle=NEW.idspectacle;
    #text_spectacle
    DELETE FROM yvestest_draft.text_spectacle WHERE yvestest_draft.text_spectacle.idspectacle=NEW.idspectacle;
    #spectacle_contact
    DELETE FROM yvestest_draft.spectacle_contact WHERE yvestest_draft.spectacle_contact.idspectacle=NEW.idspectacle;
    #spectacle_person
    DELETE FROM yvestest_draft.spectacle_person WHERE yvestest_draft.spectacle_person.idspectacle=NEW.idspectacle;
     
     
    #insertions
    #spectacles
    INSERT INTO yvestest_draft.spectacles SELECT * FROM yvestest.spectacles WHERE yvestest.spectacles.idspectacle=NEW.idspectacle;
    #text_spectacle
    INSERT INTO yvestest_draft.text_spectacle SELECT * FROM yvestest.text_spectacle WHERE yvestest.text_spectacle.idspectacle=NEW.idspectacle;
    #spectacle_contact
    INSERT INTO yvestest_draft.spectacle_contact SELECT * FROM yvestest.spectacle_contact WHERE yvestest.spectacle_contact.idspectacle=NEW.idspectacle;
    #spectacle_person
    INSERT INTO yvestest_draft.spectacle_person SELECT * FROM yvestest.spectacle_person WHERE yvestest.spectacle_person.idspectacle=NEW.idspectacle;
     
     
    #remise en etat du "vieux" titre
    UPDATE yvestest.spectacles SET title=OLD.title WHERE yvestest.spectacles.idspectacle=NEW.idspectacle;
     
    END IF;
     
    END$$;
    Je ne sais pas si c'est très claire en tout cas merci d'avance pour vos idées !

    ++

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    Bon, le titre est un peu tordu mais voilà ce que je veux faire :

    Sur l'update d'une colonne, je veux :

    - enregistrer la nouvelle valeur de la ligne dans une autre base de données
    - revenir à l'état précédent sur la base en cours.
    - il faut que tu utilises un BEFORE UPDATE et non un AFTER
    - à la fin, pour chaque colonne, tu fais un code de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET new.col1 = old.col1 ;
    SET new.col2 = old.col2 ;
    ...

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

Discussions similaires

  1. un trigger si un table est updatée en updater une autre
    Par jeorcal dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 15/07/2010, 05h39
  2. Trigger sur un update
    Par smux dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 29/05/2008, 23h23
  3. Problème lors d'un trigger sur update
    Par yonialhadeff dans le forum Développement
    Réponses: 1
    Dernier message: 09/10/2007, 08h44
  4. Trigger sur Update et Insert
    Par Jérôme Lambert dans le forum Développement
    Réponses: 2
    Dernier message: 11/12/2006, 13h52
  5. [Oracle 9i] Triggers sur les updates de tables
    Par zestrellita dans le forum Oracle
    Réponses: 12
    Dernier message: 07/12/2005, 11h32

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