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 : erreur survenue lors de l'exécution


Sujet :

SQL Procédural MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Trigger : erreur survenue lors de l'exécution
    Bonsoir j'ai besoin d'aide
    Voila mon code :
    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
    DELIMITER $$
    CREATE TRIGGER after_insert_bon_de_livraison AFTER INSERT
    ON bon_de_livraison FOR EACH ROW
     BEGIN
             DECLARE v_code_bl VARCHAR(8);
             DECLARE nbre_num_attribuer VARCHAR(8);
            -- Détermination du nombre de ligne enregistrée
             SELECT COUNT(CODE_BL) INTO nbre_num_attribuer FROM bon_de_livraison;
            -- S'il n'y a pas aucun numéro attribué le premier numéro d'office est 'BL-00001'
            IF nbre_num_attribuer = 0 THEN
              SET v_code_bl = 'BL-00001';
            -- Dans le cas contraire
            ELSE
                 -- Détermination du plus grand numéro attribué --
                   SELECT MAX(RIGHT(CODE_BL,CHAR_LENGTH(CODE_BL)-3)+1) INTO nbre_num_attribuer FROM bon_de_livraison;
                 -- Attribution du nouveau numéro --
                   SET v_code_bl = CONCAT('BL-', REPEAT('0', 5 - CHAR_LENGTH(nbre_num_attribuer)), nbre_num_attribuer );
            END IF;
             UPDATE bon_de_livraison SET CODE_BL = v_code_bl WHERE NUM_BL = NEW.NUM_BL; 
     END $$
    DELIMITER ;
    Et voilà l'erreur que Mysql me renvoie:

    #1442 - Can't update table 'bon_de_livraison' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    Aider moi à résoudre le problème

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vous ne pouvez pas utiliser la table bon_de_livraison dans votre trigger qui se déclenche sur bon_de_livraison.

    Soit vous passez par une procédure qui détermine le CODE_BL (via un select for update) et qui insère directement la ligne, soit avec un trigger vous devez déporter la génération du CODE_BL dans une autre table, typiquement une table d'une colonne avec votre code qui s'incrémente.

    Regardez The InnoDB Transaction Model and Locking

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 716
    Points : 52 380
    Points
    52 380
    Billets dans le blog
    4
    Par défaut
    C'est une limitation de MySQL. Certains SGBDR comme SQL Server permettent la mise à jour de la table cible du déclencheurs.... (c'est d'ailleurs SQL Server qui a inventé le concept de déclencheurs en 1986...)

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Erreur SQL0104N lors de l'exécution d'une stored proc
    Par bladerunners dans le forum DB2
    Réponses: 1
    Dernier message: 22/03/2007, 20h50
  2. erreur windows lors de l'exécution
    Par sandytarit dans le forum C
    Réponses: 14
    Dernier message: 08/11/2006, 18h00
  3. [Trigger] Erreur 1136 lors d'une insertion
    Par tyrant dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/05/2006, 22h41
  4. Analyser les exceptions survenues lors de l'exécution
    Par cedricgirard dans le forum Langage
    Réponses: 10
    Dernier message: 13/10/2005, 16h22
  5. Message d'erreur Windows lors de l'exécution de l'appli D6-
    Par kolac dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/12/2004, 18h55

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