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 27/05/2008, 11h54   #1
Invité régulier
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 8
Points : 8
Par défaut Probléme Trigger sur Mysql 5

Bonjour à toutes et à tous,
je suis en train de créer un trigger sur MySql 5. Le but Effectuer un test sur la ligne à inséerer. Si le différence entre @send et @lastoken est < 300, de faire un update sur la ligne à insérer.
J'obtiens comme erreur : #1415 - Not allowed to return a result set from a trigger
Et voici le code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
DELIMITER $$
CREATE TRIGGER addToken BEFORE INSERT ON sessionend
FOR EACH
ROW BEGIN DECLARE send INT;
 
DECLARE lastoken INT;
 
IF( NEW.token != "" ) THEN SET send =0;
 
SET lastoken =0;
 
SELECT @send = timestamp
FROM sessionend
WHERE token = 'sessionEnded';
 
SELECT @lastoken = timestamp
FROM sessionend
ORDER BY timestamp DESC
LIMIT 1 ;
 
IF( (
@send - @lastoken
) <300 ) THEN UPDATE sessionend SET NEW.token = 'continue' WHERE token = 'sessionEnded';
 
END IF ;
 
END IF ;
 
END $$
madousn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 15h21   #2
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 986
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 986
Points : 3 568
Points : 3 568
Au premier coup d'oeil je ne vois pas mais je pense que c'est un problème d'interprétation des deux SELECT.

Code :
1
2
3
4
SELECT @lastoken = timestamp
FROM sessionend
ORDER BY timestamp DESC
LIMIT 1 ;
Tente ceci à la place
Code :
1
2
3
4
 
SET lastoken  =(SELECT timestamp 
FROM sessionend 
ORDER BY timestamp DESC LIMIT 1);
Idem pour l'autre requête.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 16h09   #3
Invité régulier
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 8
Points : 8
En fait tu as raison le probléme venait du fait que les triggers dans Mysql n'accepte pas (ou du moins je crois, en tout cas difficile) l'affectation d'un variable dans le SELECT comme ceci
Code :
1
2
3
4
SELECT @lastoken = timestamp
FROM sessionend
ORDER BY timestamp DESC
LIMIT 1 ;
Mais plutot de cette maniére
Code :
1
2
3
4
SELECT timestamp
FROM sessionend
ORDER BY timestamp DESC
LIMIT 1 INTO lastoken;
en tout cas ça marche. Merci encore de tes conseils.
madousn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 01h09   #4
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Bonjour,

Attention cette notation n'est pas normalisé et le INTO doit se trouver juste après le SELECT de cette façon :

Code :
1
2
3
4
5
SELECT timestamp
INTO lastoken
FROM sessionend
ORDER BY timestamp DESC
LIMIT 1;
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 12h40   #5
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 986
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 986
Points : 3 568
Points : 3 568
Exacte, j'ai confondu avec la syntaxe de SQLServer.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 12h27   #6
Candidat au titre de Membre du Club
 
Homme
Inscription : octobre 2006
Messages : 62
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2006
Messages : 62
Points : 11
Points : 11
bonjour,

je fais un appel d'une procédure stockée dans un trigger de la façon suivante

Code :
1
2
3
4
5
CREATE TRIGGER fr AFTER UPDATE ON matable
FOR EACH ROW
BEGIN
call proc();
END
et j'ai la même erreur (1415) alors que la syntaxe de ma procédure respecte bien celle donnée par kazou...

merci pour tous vos conseils
tomasi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 14h38   #7
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 986
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 986
Points : 3 568
Points : 3 568
Il me semble qu'il soit pas possible d'appeler une procédure. Pour cela il faut faire une procédure avec rien dedans.
Si ça marche, alors c'est qu'il y a une chose qui ne va pas dans la procédure.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 09h06   #8
Candidat au titre de Membre du Club
 
Homme
Inscription : octobre 2006
Messages : 62
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2006
Messages : 62
Points : 11
Points : 11
en faisant des recherches sur le net il m'a semblé possible de le faire, sans certitude, mais apparemment certains auraient réussi...

et sinon je ne vois pas trop l'intérêt de faire une procédure vide

je vais essayer de faire autrement pour m'en passer
tomasi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 09h20   #9
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 986
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 986
Points : 3 568
Points : 3 568
En faite, si c'est possible parce que moi même je le faisais pour loger (INSERT) les données. Pour cela j'appelais une procédure dans un trigger. Maintenant, il est fort possible que la procédure bug.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united 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 17h43.


 
 
 
 
Partenaires

Hébergement Web