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 :

Trigger sur un INSERT pour incrémenter un champ


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Trigger sur un INSERT pour incrémenter un champ
    Bonjour,

    J'ai une table contrat avec 3 champs : id_contrat, #id_projet, avenant.

    L'avenant est égal à 0 lorsque c'est le premier contrat d'un projet et doit s’incrémenter à chaque fois que je crée un nouveau contrat.

    J'ai donc essayé de créer un trigger mais mon WorkBench me donne l'erreur suivante :

    Error Code: 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 '.avenant = temp+1 ;

    END' at line 12
    et voici le trigger en question :
    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
    USE bqp;
     
    DELIMITER // 
    -- ============================================================================
    --   TRIGGER CONTRAT                         
    -- ============================================================================
     
    CREATE TRIGGER Ajout_contrat_avenant
    BEFORE INSERT ON bqp.Contrat 
    FOR EACH ROW
     
    BEGIN
       DECLARE temp INTEGER;
       SELECT MAX(avenant) FROM bqp.Contrat WHERE Contrat.id_projet = NEW.id_projet INTO temp;
       New.avenant = temp+1 ;
    END //
    Pouvez-vous m'aider merci, infiniment. Ou si vous avez une solution autre, je suis toute ouïe !

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Le INTO est mal positionné. Essayez comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(avenant) INTO temp FROM bqp.Contrat WHERE Contrat.id_projet = NEW.id_projet;
    À la ligne suivante, il manque l'instruction SET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET NEW.avenant = temp+1 ;
    Enfin, si c'est un premier avenant, il faut gérer le cas 0 (parce que le trigger va se déclencher et il n'y aura rien dans la variable temp) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF temp IS NULL THEN
        SET NEW.avenant = 0;
    ELSE
        SET NEW.avenant = temp+1 ;
    END IF;
    Je n'ai pas testé et je n'utilise pas trop MySQL (encore moins les triggers), mais c'est par là qu'il faut chercher...

    Par ailleurs, avez-vous prévu le cas d'une suppression de contrat ? Il faudra alors décrémenter "avenant".
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci de votre réponse je vais tester tout ça et je reviendrais vers vous.

    Non je voulais d'abord gérer l'ajout. De plus il n'y aura pas la possibilité de supprimer l'avenant dans cette application.

    merci beaucoup !

Discussions similaires

  1. [2012] TRIGGER sur UPDATE INSERT de plusieurs champs
    Par SEGA team dans le forum Développement
    Réponses: 8
    Dernier message: 10/06/2015, 17h43
  2. Requête sur deux tables avec incrément de champ
    Par LB dans le forum Langage SQL
    Réponses: 12
    Dernier message: 15/11/2014, 17h41
  3. Trigger pour incrémentation de champs
    Par stregza dans le forum Langage SQL
    Réponses: 10
    Dernier message: 05/09/2014, 20h12
  4. [AC-2010] expression pour incrémenter un champ
    Par sebinator dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/10/2012, 12h19
  5. "Trigger" sur une insertion : référence au nouveau tuple
    Par samworld dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/06/2007, 22h27

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