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 d'update dans un After insert trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti Avatar de benjamin122
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 25
    Par défaut probleme d'update dans un After insert trigger
    Bonjour,

    Je travaille sur un trigger AFTER INSERT. Et j'aimerai faire un update dans celui ci. Il est très simple mais ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TRIGGER `af` AFTER INSERT ON `product_description`
     FOR EACH ROW BEGIN
     UPDATE `product_description` SET `name` = "PAPA"  WHERE `product_id` = NEW.product_id;  
    END
    A savoir que quand j'éxécute la requete dans la console et que je remplace NEW.product_id par la bonne valeur, elle fonctionne très bien. Mais pas moyen dans le trigger
    Le product_id dans la table product_description est la clé primaire. Et voici la structure du champs name : name varchar(255).

    Impossible de trouver pour moi sans une aide extérieure
    Je suis ouvert à toute suggestion , n'hésitez pas à me donner des pistes SVP.
    Mille remerciements

    Benjamin122

  2. #2
    Membre averti Avatar de benjamin122
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 25
    Par défaut
    Bon ok,,, erreur de débutant , on ne peut appriori pas faire de update d'une table dans un trigger de cette même table.. sujet résolus

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 873
    Par défaut
    Salut benjamin122.

    Qu'est-ce que vous voulez faire exactement ?

    Si je reprends votre exemple, vous voulez modifier la colonne 'name' en mettant 'papa' si la colonne 'product_id' est égale à la valeur courante d'insertion.
    Autrement dit, à chaque fois que vous insérez une nouvelle ligne, vous désirez mettre la valeur 'papa' dans 'name. Est-ce bien cela ?
    J'ai repris votre exemple en l'adaptant. Nul besoin de faire un 'update'. Il suffit de créer un trigger 'before insert' et de modifier la valeur de la colonne 'name'.
    Donc la réponse est OUI, on peut le faire en procédant ainsi :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `product_description`
    --------------
     
    --------------
    CREATE TABLE `product_description`
    (
      `product_id`  integer unsigned  NOT NULL AUTO_INCREMENT primary key,
      `name`        varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `product_description` (`name`) values ('léon'), ('lucien'), ('maurice')
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `modif`
    --------------
     
    --------------
    CREATE TRIGGER `modif`
    BEFORE INSERT ON `product_description`
    FOR EACH ROW
    BEGIN
      SET NEW.name = 'papa';
    END
    --------------
     
    --------------
    insert into `product_description` (`name`) values ('alfred'), ('adolphe'), ('gérard')
    --------------
     
    --------------
    select * from `product_description`
    --------------
     
    +------------+---------+
    | product_id | name    |
    +------------+---------+
    |          1 | léon    |
    |          2 | lucien  |
    |          3 | maurice |
    |          4 | papa    |
    |          5 | papa    |
    |          6 | papa    |
    +------------+---------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+

  4. #4
    Membre averti Avatar de benjamin122
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 25
    Par défaut
    Bonjour,

    Merci pour votre réponse Artemus24. Vous avez bien compris ce que je demandais . le code cité ci-dessus s'agit d'une petite partie de mon trigger, et pour des raisons non-citées j'ai besoin de récupérer des données insérées après une série d'insert au sein même de ce trigger.
    Voila pourquoi je dois passer par un AFTER INSERT.
    Merci pour la réponse, ce sujet est résolus

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 873
    Par défaut
    Salut benjamin122.

    Citation Envoyé par benjamin122
    Voila pourquoi je dois passer par un AFTER INSERT.
    Votre exemple montrait que vous vouliez modifier une valeur en particulier.
    La solution est de faire un 'before insert' et de modifier cette valeur quand elle se présente.
    A la fin du 'trigger before insert', la ligne sera insérée dans la table.

    Par un 'after insert', ce n'est pas possible car d'une part la ligne est déjà insérée dans la table et d'autre part on ne peut pas faire un update sur la même table.

    @+

  6. #6
    Membre averti Avatar de benjamin122
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 25
    Par défaut
    Merci pour l'informations et l'aide précieuse que vous m'avez apporté

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

Discussions similaires

  1. Utiliser Inserted ou Updated dans un Trigger
    Par olibara dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/11/2012, 11h37
  2. Problème Update dans un trigger After Delete
    Par gouzou38 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/05/2011, 15h52
  3. Probleme de lock sur un trigger after insert
    Par funboard dans le forum Oracle
    Réponses: 5
    Dernier message: 04/03/2009, 12h14
  4. Probleme d'update dans un gridview
    Par Arthis dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/09/2007, 10h55
  5. [Declencheur] Update dans trigger Insert
    Par gilder89 dans le forum Développement
    Réponses: 2
    Dernier message: 25/05/2007, 10h30

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