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 qui fait bugger la console


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Points : 23
    Points
    23
    Par défaut Trigger qui fait bugger la console
    Bonjour, mon problème est que mon trigger ne marche pas d'une part et plus embêtant, il fait planter la console. C'est à dire que j'écris une instruction infinie comme ci dessous :



    Mon trigger est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DROP TRIGGER IF EXISTS overdrafts1; 
    delimiter //
    CREATE OR REPLACE TRIGGER overdrafts1 
    BEFORE UPDATE ON account
    FOR EACH ROW 
    BEGIN
     IF NEW.credit_limit<7 THEN
     INSERT INTO overdrafts(curdate()+0,43,NEW.credit_limit)
    END 
    //
    Mon erreur est la suivante :
    Et voici les tables si besoin :

    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 TABLE overdrafts
    (
    Date date,
    account_number Integer,
    overdraft_amount Integer 
    );
    ALTER TABLE overdrafts
      ADD CONSTRAINT fka_overdrafts_account_number FOREIGN KEY 
    (account_number) REFERENCES account(number);
     
    CREATE TABLE account (number INTEGER PRIMARY KEY AUTO_INCREMENT,
                          customer INTEGER NOT NULL,
                          balance INTEGER,
                          credit INTEGER);
    ALTER TABLE account
      ADD CONSTRAINT fka_account_customer FOREIGN KEY (customer) REFERENCES customer(number);
    Toute aide sera très appréciée, je ne peux pas vraiment avancer comme ça...

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Bonjour,

    Essaie comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DROP TRIGGER IF EXISTS overdrafts1; 
    DELIMITER //
    CREATE TRIGGER overdrafts1 
    BEFORE UPDATE ON account
    FOR EACH ROW 
    BEGIN
      IF NEW.credit_limit<7 THEN
        INSERT INTO overdrafts (`Date`, `account_number`, `overdraft_amount`)  VALUES (CURDATE()+0,43,NEW.credit_limit);
      END IF;
    END//

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    Merci Fred_34, en effet ça ne risquais pas de marcher avec cette erreur!
    Cependant le bug de la console est encore la, je ne sais pas quoi faire...

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    Je crois avoir résolu mon problème, en mettant mon trigger à la fin du fichier sql.
    Il y avait des appels à des procédures après c'est ce qui a du créer cette erreur bizarre.
    Je mettrais ce topic résolu demain si l'erreur n’apparaît plus d'ici la.

    Edit: non en fait ça ne résoud pas le problème, la console bug toujours et même plus qu'avant car avant elle pouvait m'afficher le select profil.
    Je suspect que peut etre je dépasse le nombre de requetes possibles autorisées, car ma bdd est assez grande.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Il manque peut être :


  6. #6
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    je pense que fred a raison...

    de manière générale, quand tu as changé le délimiteur et que tu vois que ta console agit bizarrement:
    • tu reviens pas à l'invite avec le délimiteur normal alors que tu devrais...
    • tu as des erreurs de syntaxe sur des trucs qui te paraissent bons
    • tu as pas l'invite en tapant ; suivit d'entrée


    tu peux déjà tenter ce qu'il t'a mis si tu as l'invite sinon tape le délimiteur que tu avais choisi puis entrée et normalement tu dois avoir l'invite mysql et là tu peux refaire ce qu'il t'a dit de taper

    pour éviter ce genre de pb, le changement de délimiteur doit être restreint à quand il est vraiment utile, encadrer:
    • create procedure
    • create function
    • create trigger

    en gros, là où tu définis du sql procédural contenant plus d'une ligne

    quand tu as du code comme ça, tu as intérêt à te faire un fichier .sql et à l'importer ou à copier/coller sont contenu ensuite... par contre, n'oublie pas alors de toujours utiliser un saut de ligne final pour bien valider la dernière ligne (si tu fais un copier/collé)...

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    Ca marche en effet, c'était bien un problème de délimiteur. Il manquait le "delimiteur ;".
    Merci beaucoup à vous deux Fred_34 et ericd69, je vais pouvoir passer à la partie "fun" qui consiste à faire marche le trigger.
    Je met le topic en résolu car c'était mon plus gros problème.

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

Discussions similaires

  1. Trigger qui fait bloquer un insert
    Par totot dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2015, 15h31
  2. PhpMyAdmin requete qui fait bugger
    Par siro1 dans le forum Débuter
    Réponses: 0
    Dernier message: 25/06/2013, 12h02
  3. [AJAX] Paramètre async qui fait bugger Apache
    Par jeff9600 dans le forum AJAX
    Réponses: 4
    Dernier message: 12/07/2012, 21h34
  4. [oracle 9i] Un trigger qui fait planter oracle !
    Par isoman dans le forum PL/SQL
    Réponses: 10
    Dernier message: 29/05/2008, 10h26
  5. Creation d'un trigger qui fait appel java
    Par titexe dans le forum PL/SQL
    Réponses: 2
    Dernier message: 11/04/2008, 08h33

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