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 :

Problème avec un trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Par défaut Problème avec un trigger
    Bonjour,
    J'ai un trigger qui doit se faire avant une insertion, en il doit en quelque sorte m'autoriser ou non la requete insert.
    voici mon trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER test BEFORE INSERT ON prendre
    FOR EACH ROW
    BEGIN
        DECLARE nb INTEGER;
        SET nb = (SELECT COUNT(*) FROM reserver WHERE IDPERS = NEW.IDPERS AND IDREPAS = NEW.IDREPAS);
        IF nb = 0 THEN
            ROLLBACK;
        END IF;
    END
    Or il me sort :

    #1422 - Explicit or implicit commit is not allowed in stored function or trigger.
    Je comprend pas pourquoi?

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Le trigger et l'insertion sont liés dans mécanisme sous-transactionnel, càd que si l'insertion échoue, l'effet du trigger sera automatiquement annulé, et vice-versa. Cette opération atomique trigger + insertion peut faire elle-même partie d'une transaction plus large, qui n'est pas en soit affectée par ce qui se passe dans l'insertion. Du coup, ROLLBACK et COMMIT sont interdits dans les triggers.

    Si tu veux interdire l'insertion, l'astuce est de faire commettre une erreur à ton trigger, par exemple en insérant un NULL dans une clé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF nb = 0 THEN INSERT INTO prendre (IDprendre) VALUES (NULL) ;
    Pour plus de détails sur cette technique, je t'invite à lire l'article de kazou :
    http://alain-defrance.developpez.com...integre-error/

    Dans ton cas précis, il me semble que tu n'as pas besoin de trigger. Tu devrais pouvoir faire ton insertion sur ce modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO prendre (IDpers, IDrepas)
    SELECT IDPERS, IDREPAS 
    FROM reserver
    WHERE IDPERS = param_IDPERS AND IDREPAS = param_IDREPAS
    Si la combinaison IDPERS / IDREPAS n'existe pas dans reserver, il n'y a aucune ligne à insérer.

Discussions similaires

  1. Problème avec un trigger
    Par fayerne dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/01/2008, 00h36
  2. Réponses: 4
    Dernier message: 27/11/2007, 15h32
  3. probléme avec un trigger
    Par sofiane1111 dans le forum Oracle
    Réponses: 4
    Dernier message: 14/06/2007, 11h17
  4. Problème avec un trigger...
    Par nasgektw dans le forum Développement
    Réponses: 3
    Dernier message: 28/04/2006, 17h41
  5. [T-SQL] problème avec un trigger
    Par karine77 dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 26/09/2005, 10h45

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