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 auto_increment apres chaque insertion


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut Trigger auto_increment apres chaque insertion
    Bonjour à tous,

    je voudrais insérer automatiquement une valeur auto_incremente dans une table qui est vide au départ et qui sera déclencheé après insertion d'une valeur dans une autre colonne.

    ma tables est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE CONTROLES(
    controle_id INTEGER AUTO_INCREMENT NOT NULL,
    reference_id INTEGER NULL,
    controleur_nom VARCHAR(20) NULL,
    quantite_controlee INTEGER NOT NULL,
    date_controle VARCHAR(20) NULL,
    observation NVARCHAR(255) NULL,
    CONSTRAINT CONTROLES_controle_id_pk PRIMARY KEY (controle_id),
    CONSTRAINT CONTROLES_reference_id_fk FOREIGN KEY (reference_id) REFERENCES ARTICLE_REFERENCES (reference_id),
    CHECK (reference_id >= 0)
    );



    mon trigger est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DELIMITER $$
     
    CREATE OR REPLACE TRIGGER INCR_CONTROLE 
    BEFORE INSERT ON CONTROLES  
    FOR EACH ROW 
    BEGIN 
    	SELECT NVL(MAX(reference_id),0)+ 1 
    	INTO :NEW.reference_id 
    	FROM CONTROLES WHERE controle_id:NEW.controle_id; 
    END $$
     
    DELIMITER ;
    MySQL a répondu:

    #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 'TRIGGER INCR_CONTROLE
    BEFORE INSERT ON CONTROLES
    FOR EACH ROW
    BEGIN
    SE' at line 1


    merci de votre aide

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    je débute en mysql ....je sais pas si c'est faisable ???

  3. #3
    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
    L'auto-incrément sur controle_id ne te suffit pas ???

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    justement je cherche à faire le lien avec une autre table (ma table de base) qui a refrence_id comme clé primaire !! je sais pas si tu peux me proposer une modification sur la structure de ma BD je suis preneur !

    ma table de est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE ARTICLE_REFERENCES(
    reference_id INTEGER AUTO_INCREMENT NOT NULL,
    reference_nom VARCHAR(20) NULL,
    indice VARCHAR(20) NULL,
    lot_num VARCHAR(20) NULL,
    lot_quantite INTEGER NULL,
    fcr VARCHAR(20) NULL,
     
    CONSTRAINT ARTICLE_REFERENCES_reference_id_pk PRIMARY KEY (reference_id));

  5. #5
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 062
    Points
    6 062
    Par défaut
    Je sais pas si ta syntaxe de trigger est bonne.
    Par contre je ne saisie pas trop ce que tu souhaites faire. Peux-tu être plus précis.
    Au passage je te donne une fonction qui permet de récupérer le dernier id.
    LAST_INSERT_ID()

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Merci pour la réponse, je m’explique donc : j’ai la table mère « ARTICLE_REFERENCES » qui sera renseignée par une autre table « CONTROLES »

    ARTICLE_REFERENCES a pour colonnes :

    reference_id INTEGER AUTO_INCREMENT
    reference_nom VARCHAR(20)
    indice VARCHAR(20)
    lot_num VARCHAR(20)
    lot_quantite INTEGER

    CONSTRAINT ARTICLE_REFERENCES_reference_id_pk PRIMARY KEY (reference_id)

    CONTROLES a pour colonnes :

    controle_id INTEGER AUTO_INCREMENT
    reference_id INTEGER
    controleur_nom VARCHAR(20)
    quantite_controlee INTEGER
    date_controle VARCHAR(20)
    observation NVARCHAR(255)
    CONSTRAINT CONTROLES_controle_id_pk PRIMARY KEY (controle_id)
    CONSTRAINT CONTROLES_reference_id_fk FOREIGN KEY (reference_id) REFERENCES ARTICLE_REFERENCES (reference_id)


    Mon problème est comment relié les deux tables ? à chaque insertion à la base y aura une ligne supplémentaire dans les 2 tables, c’est pour cela que j’ai pensé à incrémenté le champs reference_id ?

  7. #7
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 062
    Points
    6 062
    Par défaut
    Ok, je crois comprendre. Si je résume bien.
    Si tu créés un enregistrement dans ARTICLE_REFERENCES Il y a automatique un enregistrement dans CONTROLES . Mais pour les liers il te faut passer l'identifiant unique de ARTICLE_REFERENCES.

    Ok, dans ce cas là tu n'as pas besoin de Trigger mais une procédure stocké. qui va contenir ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO ARTICLE_REFERENCES 
      (reference_nom, indic, lot_num,lot_quantite) 
    VALUES 
       (p_reference_nom, p_indic, p_lot_num,p_lot_quantite);
     
    INSERT INTO CONTROLES 
    (reference_id, controleur_nom, date_controle,observation  )
    VALUES
    (LAST_INSERT_ID, p_controleur_nom, p_date_controle, p_observation);

    Toute les valeur de type p_xxxxx ce sont les variables que tu dois faire passer en paramètre de ta procédure stocké. Ainsi en une seul requête tu auras deux enregistrements.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    et si je mets dans la table CONTROLES le champs reference_id comme clé primaire (auto_increment) de cette même table et par la même occasion elle sera la clé étrangère de la table ARTICLE_REFERENCES ? et j'enlève du coup le champ controle_id ? qu'est ce que vous pensez ?

  9. #9
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 062
    Points
    6 062
    Par défaut
    Citation Envoyé par agur29 Voir le message
    et si je mets dans la table CONTROLES le champs reference_id comme clé primaire (auto_increment) de cette même table et par la même occasion elle sera la clé étrangère de la table ARTICLE_REFERENCES ? et j'enlève du coup le champ controle_id ? qu'est ce que vous pensez ?
    Oui, mais pas en auto incrément parce qu'il suffit qu'il y a un os pour que les id ne soit pas synchro ! Je pense que tu devrais quand même passer le dernier ID de la table ARTICLE_REFERENCE. C'est plus propre et moin dangeureux.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    je vois pas comment utiliser la procédure stockée j'ai jamais créer une ?? vous pouvez pas me donner le début ?

    merci bcp

  11. #11
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 062
    Points
    6 062
    Par défaut
    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
    CREATE PROCEDURE `maprocedure`(IN monparametre1TEXT, IN monparametre2 CHAR(1))
        DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY INVOKER
        COMMENT ''
    BEGIN
    INSERT INTO ARTICLE_REFERENCES 
      (reference_nom, indic, lot_num,lot_quantite) 
    VALUES 
       (p_reference_nom, p_indic, p_lot_num,p_lot_quantite);
     
    INSERT INTO CONTROLES 
    (reference_id, controleur_nom, date_controle,observation  )
    VALUES
    (LAST_INSERT_ID, p_controleur_nom, p_date_controle, p_observation);
    END;
    En gros c'est comme ça. PAr contre je n'ai pas mis les parametre des deux requêtes d'insert. Tu regardes par rapprort au deux en haut monparametre1 et monparametre2

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/11/2014, 15h08
  2. Réponses: 5
    Dernier message: 13/10/2011, 12h18
  3. Trigger : update apres un insert
    Par xav_carene dans le forum SQL
    Réponses: 4
    Dernier message: 18/08/2010, 17h48
  4. Trigger Incrementation apres insertion
    Par agur29 dans le forum Développement
    Réponses: 4
    Dernier message: 02/08/2007, 18h15
  5. Trigger Incrementation apres insertion
    Par agur29 dans le forum Développement
    Réponses: 1
    Dernier message: 02/08/2007, 13h40

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