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 21/10/2011, 15h02   #1
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 0
Points : 0
Par défaut Impossible de déclarer un handler

Au départ je voulais capter une erreur pour faire un rollback. J'ai plus ou moins trouvé qu'il fallait utiliser DECLARE EXIT HANDLER FOR SQLEXCEPTION qu’apparemment on ne peut mettre que dans des procedures

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
CREATE PROCEDURE myProc()
BEGIN 
	DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN 	ROLLBACK;	SELECT -1;END
	DECLARE EXIT HANDLER FOR SQLWARNING BEGIN 	ROLLBACK;	SELECT -2;END
	DECLARE EXIT HANDLER FOR NOT FOUND BEGIN 	ROLLBACK;	SELECT -3;END
 
	SET autocommit=0;
 
	START TRANSACTION; 
 
	INSERT INTO maTable(champ1) VALUES('blabla');
	INSERT INTO maTable(champ1) VALUES('blabla2');
 
	COMMIT;
	SET AUTOCOMMIT=1;
	SELECT 1;
END
et là j'ai l'erreur 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 '' at line 3
Après plusieurs essai de syntaxe différente, j'ai toujours pas trouver d'où vient mon pb. Une idée ? Merci
drayane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 15h56   #2
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 0
Points : 0
bon j'ai un peu avancé, comme je suis sur phpmysql je devais mettre un delimiter mais bon là ça mouline et je pense que c'est mal barré

Nv Code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DELIMITER |
CREATE PROCEDURE myProc(OUT retour INT)
BEGIN 
	DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN 	ROLLBACK;	SET retour = -1;END;
	DECLARE EXIT HANDLER FOR SQLWARNING BEGIN 	ROLLBACK;	SET retour = -2;END;
	DECLARE EXIT HANDLER FOR NOT FOUND  BEGIN 	ROLLBACK;	SET retour = -3;END;
 
 
	SET autocommit=0;
 
	START TRANSACTION; 
 
	INSERT INTO maTable(champ1) VALUES('blabla');
	INSERT INTO maTable(champ1) VALUES('blabla2');
 
	COMMIT;
	SET AUTOCOMMIT=1;
	SET retour = 1;
END|
DELIMITER ;
drayane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 16h01   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Le DELIMITER n'est pas lié à l'utilisation de phpMyAdmin ; il permet simplement de dire à MySQL : "Il y a encore des instructions à exécuter après le prochain point virgule et jusqu'au prochain symbole que j'ai fourni comme délimiteur."
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h57   #4
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 870
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 : 870
Points : 1 355
Points : 1 355
salut,

il me semble bien que tu ne peux lancer qu'une seule action quand un handler se déclenche

donc si tu veux faire un truc plus compliqué, fais une procédure stockée qui sera appelée par lui, ça devrait mieux fonctionner
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h40.


 
 
 
 
Partenaires

Hébergement Web