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 09/11/2006, 12h52   #1
Membre actif
 
Inscription : janvier 2006
Messages : 389
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : janvier 2006
Messages : 389
Points : 152
Points : 152
Envoyer un message via MSN à dragonfly
Par défaut Erreur de syntaxe d'une procédure

Bonjour à tous.

Je suis sous MySQL 5.0.22 et lors de l'execution d'une procédure :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `FicheHoraire`.`CalculDay` $$
CREATE PROCEDURE `FicheHoraire`.`CalculDay` ()
BEGIN
     declare TmpTime time;
     TmpTime = (NEW.FinMat - NEW.DebMat) + (NEW.FinAprem - NEW.Debaprem );
     UPDATE Jour SET TotalDay=TmpTime WHERE Id=New.Id;
 
     END $$
 
DELIMITER ;
J'ai cette erreur :

Code :
1
2
3
 
Script line: 5	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 '= (NEW.FinMat - NEW.DebMat) + (NEW.FinAprem - NEW.Debaprem );
     update Jour ' at line 4
Je pense avoir une erreur de syntaxe mais je ne sais pas ou ...
dragonfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2006, 13h12   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par Aide MySQL
DECLARE ne peut être utilisé dans un bloc BEGIN ... END, et doit intervenir au début de la routine, avant tout autre commande.
et aussi :
Citation:
Envoyé par Aide MySQL
Commande d'affectation de variables SET
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2006, 14h14   #3
Membre actif
 
Inscription : janvier 2006
Messages : 389
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : janvier 2006
Messages : 389
Points : 152
Points : 152
Envoyer un message via MSN à dragonfly
MERCI mais ...

Ca ne marche toujours pas, en fait voila tout le code(modifié) avec le trigger
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
CREATE TRIGGER calculupdata AFTER INSERT
    ON Jour FOR EACH ROW CALL CalculDay();
 
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `FicheHoraire`.`CalculDay` $$
CREATE PROCEDURE `FicheHoraire`.`CalculDay` ()
DECLARE
     TmpTime time;
BEGIN
     SET TmpTime = (NEW.FinMat - NEW.DebMat) + (NEW.FinAprem - NEW.Debaprem );
     UPDATE Jour SET TotalDay=TmpTime WHERE Id=New.Id;
 
END $$
 
DELIMITER ;
Avec toujours la même erreur...

HELP
dragonfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2006, 15h48   #4
Membre du Club
 
Inscription : novembre 2006
Messages : 48
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 48
Points : 48
Points : 48
Bonjour,

On ne peux pas appeler une procedure stockés à partir de triggers
http://dev.mysql.com/doc/refman/5.1/...-triggers.html
The trigger cannot use the CALL statement to invoke stored procedures that return data to the client or that use dynamic SQL. (Stored procedures are allowed to return data to the trigger through OUT or INOUT parameters.)

De plus dans ta procédure, tu fais référence à NEW ou OLD que ta procédure ne connais pas.

A+
LoveBuzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2006, 11h02   #5
Membre actif
 
Inscription : janvier 2006
Messages : 389
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : janvier 2006
Messages : 389
Points : 152
Points : 152
Envoyer un message via MSN à dragonfly
Merci Merci Mais...

Quand j'execute ce code, il ne me met aucune erreur (je ne l'ais pas testé sur un insert (je préfére tester avec un vrai code la ce n'est qu'un exemple)).
Je pense que je vais tester d'ailleurs ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
CREATE TRIGGER CalculDays after INSERT ON Jour FOR each row call CalculDay();
 
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `FicheHoraire`.`CalculDay` $$
CREATE DEFINER=`stefanm`@`%` PROCEDURE `CalculDay`()
BEGIN
     declare TmpTime time;
     SET TmpTime = (NEW.FinMat - NEW.DebMat) + (NEW.FinAprem - NEW.Debaprem );
     UPDATE Jour SET TotalDay=TmpTime WHERE Id=New.Id;
 
     END $$
 
DELIMITER ;
Donc ce code passe mais...
Pourquoi tu dis qu'il ne connait pas mon NEW ou OLD (qui est parti) ??
Comment faut-il donc faire pour qu'il le reconnaisse ???
dragonfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2006, 11h13   #6
Membre actif
 
Inscription : janvier 2006
Messages : 389
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : janvier 2006
Messages : 389
Points : 152
Points : 152
Envoyer un message via MSN à dragonfly
Quand je teste il ne me met pas d'erreur met il ne prend pas en compte mes modifications donc ca passe mais ca ne fais rien , TROP BIEN lol.

Donc je vois pas ...
La je vais me pencher activement sur le probléme mais si quelqu'un a des idées ...
dragonfly 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 14h58.


 
 
 
 
Partenaires

Hébergement Web