Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2012, 11h31   #1
Candidat au titre de Membre du Club
 
Julie
Étudiant
Inscription : octobre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Julie
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 23
Points : 12
Points : 12
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 :
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 :
Citation:
Et voici les tables si besoin :

Code :
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...
MiniJulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 18h10   #2
Membre du Club
 
Homme Frédéric
Inscription : juin 2011
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 54
Points : 54
Points : 54
Bonjour,

Essaie comme ça :


Code :
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//
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 23h40   #3
Candidat au titre de Membre du Club
 
Julie
Étudiant
Inscription : octobre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Julie
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 23
Points : 12
Points : 12
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...
MiniJulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 00h29   #4
Candidat au titre de Membre du Club
 
Julie
Étudiant
Inscription : octobre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Julie
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 23
Points : 12
Points : 12
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.
MiniJulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 10h25   #5
Membre du Club
 
Homme Frédéric
Inscription : juin 2011
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 54
Points : 54
Points : 54
Il manque peut être :

Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 11h48   #6
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 875
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 : 875
Points : 1 368
Points : 1 368
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é)...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 13h08   #7
Candidat au titre de Membre du Club
 
Julie
Étudiant
Inscription : octobre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Julie
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 23
Points : 12
Points : 12
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.
MiniJulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h01.


 
 
 
 
Partenaires

Hébergement Web