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 :

Modifier la valeur d'une colonne a partir d'un trigger [MySQL-5.7]


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut Modifier la valeur d'une colonne a partir d'un trigger
    Bonjour à tous

    Après quelques jours de recherche et grâce aux conseils que ma donné Arthemus sur cet post https://www.developpez.net/forums/d1...axe-d-trigger/.
    et aussi après investigation dans l'application et la base de données d'une application venant d'un CMS que nous avons.

    Voici le problème que nous, ne comprenant pas le code source pour le modifier, étant trop touffu, nous avons décider à partir d'un trigger AFTER INSERT de modifier des lignes dans la table t_mesinfos

    j'ai les tables suivantes :

    t_user(user_id,.........)
    t_mesinfos (id, user_id, type_info, data_info) user_id étant une clé étrangère venant de t_user

    j'ai compris que pour chaque insertion dans t_user j'ai deux insertions successives dans t_mesinfos

    Voici un extrait :

    Nom : CaptureTRIGGER.JPG
Affichages : 1148
Taille : 20,3 Ko

    On voudrais ici modifier la ligne data_info pour type_info='PALIER B' à chaque insertion dans la table t_mesinfos.

    La valeur pour data_info = CC-AAA-31012019 avec
    - CC qui est un identifiant,
    - AAA qui est suivit d'un chiffre incrémenté (on à décider ici de mettre le user_id),
    - et pour finir la date du jour.

    Donc pour une utilisateur qui a pour id =200 qui est enregistré aujourd'hui on aura : CC-AAA200-31012019

    En m'inspirant du trigger du post plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER `t_mesinfos_mod` AFTER INSERT ON `t_mesinfos` 
    FOR EACH ROW
    1-récupérer la valeur  user_id du user qui vient dêtre inséré
    2- création de mon code =CC-AAA421-31012019
    3-Mise à jour du ligne data_info pour le user qui vient d'être inséré
    Pouvez vous m'aider a monter un tel Trigger si vous avez d'autre suggestions elles seront les bienvenus

    Merci à Tous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut
    j'ai essayé de concocter une première approche de mon trigger (n'ayant pas accès pour le moment à la base. pb wifi.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER `t_mesinfos_mod` AFTER INSERT ON `t_mesinfos` 
    FOR EACH ROW 
    set @val1 = last_insert_id();
    SELECT user_id INTO @mavaleur FROM t_mesinfos WHERE ID= @val1;
    UPDATE t_mesinfos
    SET data_info =concat('CC','-','AAA',@mavaleur,now())
    WHERE type_info = 'PALIER B' and user_id=@mavaleur;
    Merci pour vos corrections

  3. #3
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut
    je viens juste de tester et voici l'erreur affichée :
    Debug info: Can't update table 't_mesinfos' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    je ne vois pas ou se trouve l'erreur ?

    Merci

  4. #4
    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 882
    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 882
    Par défaut
    Salut devalender.

    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
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `t_mesinfos`
    --------------
     
    --------------
    CREATE TABLE `t_mesinfos`
    ( `id`          integer unsigned  NOT NULL auto_increment primary key,
      `user_id`     integer unsigned  NOT NULL,
      `type_info`   varchar(255)      NOT NULL,
      `data_info`   varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `modif_data_info`
    --------------
     
    --------------
    CREATE TRIGGER `modif_data_info`
    BEFORE insert ON `t_mesinfos`
    FOR EACH ROW
    BEGIN
      IF (NEW.type_info = 'Palier B') THEN
         SET NEW.data_info = concat('CC-AAA',NEW.user_id,'-',date_format(now(),'%d%m%Y'));
      END IF;
    END
    --------------
     
    --------------
    insert into `t_mesinfos` (`user_id`,`type_info`,`data_info`) values
      (24, 'Palier A', '75849'),
      (24, 'Palier B', 'AA-66-31012019'),
      (54, 'Palier A', '655744'),
      (62, 'Palier B', 'AA-66-31012019')
    --------------
     
    --------------
    select * from `t_mesinfos`
    --------------
     
    +----+---------+-----------+-------------------+
    | id | user_id | type_info | data_info         |
    +----+---------+-----------+-------------------+
    |  1 |      24 | Palier A  | 75849             |
    |  2 |      24 | Palier B  | CC-AAA24-01022019 |
    |  3 |      54 | Palier A  | 655744            |
    |  4 |      62 | Palier B  | CC-AAA62-01022019 |
    +----+---------+-----------+-------------------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    @+

  5. #5
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut
    Bonjour Artemus24
    Merci pour le coup de main je teste et je vous fais un retour.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 717
    Par défaut

    je viens de tester ça marche correctement. merci aussi pour la correction dans la mise en place du format.

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

Discussions similaires

  1. Modifier la valeur d'une colonne
    Par laurentSc dans le forum Langage SQL
    Réponses: 11
    Dernier message: 25/02/2018, 15h46
  2. Réponses: 6
    Dernier message: 14/09/2012, 20h29
  3. Réponses: 5
    Dernier message: 12/07/2010, 14h45
  4. Modifier toutes les valeurs d'une colonne
    Par charlie03 dans le forum Débuter
    Réponses: 5
    Dernier message: 10/04/2009, 08h36
  5. Réponses: 4
    Dernier message: 16/10/2006, 09h54

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