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 04/02/2007, 18h42   #1
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 726
Points : 6 851
Points : 6 851
Par défaut Qui ne fait pas ce qu'elle est censée faire

Bonjour tout le monde !!

Un petit probème avec une procédure stockée

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
delimiter //
CREATE PROCEDURE raise_error (
p_msg VARCHAR(50))
BEGIN
DECLARE _msg TINYINT;
 
-- Force an error to be raised by assigning a string to an
-- integer variable. The string will appear on the client.
SET _msg = p_msg ;
SELECT _msg;
END//
 
delimiter ;
Ceci est donc censé me lancer une erreur lorsque je fais CALL raise_error('Coucou');

Hors il me dit
Code :
1
2
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
En mettant le SELECT _msg je me suis aperçu que ma variable avait pris la valeur 0. Y'a t il un moyen d'empêcher ca pour que je puisse avoir mon erreur
C'est peut etre un paramètre ....

Merci pour vos réponses
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2007, 21h01   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
C'est un problème de @@sql_mode... ta proc ne marchera que si elle tourne en mode strict ; autrement (disons "en mode laxiste"), elle ne génère qu'un warning et non une erreur.

Les procs stocks tournent toujours avec le @@sql_mode en vigueur au moment de leur création. Pour connaître le @@sql_mode de ta procédure, il suffit de faire :
Code :
SHOW CREATE PROCEDURE raise_error \G
Ton @@sql_mode sera probablement vide.

Voici maintenant comment faire fonctionner ta procédure :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
DROP PROCEDURE IF EXISTS raise_error ;
-- la proc sera re-créée avec le Strict Mode
SET @@sql_mode = 'STRICT_ALL_TABLES' ;
delimiter //
CREATE PROCEDURE raise_error (
p_msg VARCHAR(50))
BEGIN
DECLARE _msg TINYINT;
 -- Force an error to be raised by assigning a string to an
-- integer variable. The string will appear on the client.
SET _msg = p_msg ;
SELECT _msg;
END //
delimiter ;
Tu peux maintenant vérifier que ta procédure déclenche bien une erreur, même en restaurant le @@sql_mode antérieur :
Code :
1
2
3
 
SET @@sql_mode = '' ;
call raise_error('coucou');
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 17h27   #3
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 726
Points : 6 851
Points : 6 851
Merci bcp . Ca marche mieux comme ca
mikedavem 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 20h41.


 
 
 
 
Partenaires

Hébergement Web