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 30/01/2007, 18h48   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2003
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 46
Points : 14
Points : 14
Par défaut MySQL V5 : Appeler une Proc Stock à l'intérieur d'une autre Proc Stock

Bonjour à tous,

J'ai une procédure stockée qui est chargée de créer un enregistrement dans ma base (disons, un client). Elle me renvoie un resultset avecdeux champs : un code (integer) et un libellé (varchar).
On va dire que la proc stock s'appelle "CreerClient()"

Le code est 0 si la création s'est bien passé, 1 ou 2 s'il y a eu une erreur.
Si le code est 0, le libellé contient l'id de la ligne crée.
Si le code est 1 ou 2, le libellé contient un texte décrivant le problème.

Je voudrais appeler cette procédure stockée à l'intérieur d'une autre procédure stockée, et récupérer le code et le libellé.

Un peu à la façon suivante :

Code :
1
2
3
4
5
6
7
8
9
 
CREATE PROCEDURE `nom_base`.`CreerDeuxClients`()
BEGIN
-- (declaration des variables)
-- ... 
 
call CreerClient(...) INTO code, libelle;
 
END;
Mais, évidemment, ce code là ne compile pas.

Et pour faire quelque chose comme :
Code :
1
2
 
SELECT CreerClient(...) INTO code, libelle;
Il semblerait qu'il faille que "CreerClient" soit une fonction et non une procédure.

Comment faire pour appeler correctement ma première Proc Stock dans ma seconde, et récupérer le code et le libellé ?

Merci d'avance,

Cdlt,
Péchereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 14h08   #2
Invité régulier
 
Inscription : janvier 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 13
Points : 9
Points : 9
Coucou,
j ai eu le meme probleme et j ai trouve cette solution, je la partage donc


Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH RECOMPILE ]
}
[;]
eperdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 18h49   #3
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
les procédures stockées sont des procédures, donc par définition elles ne retournent pas de valeurs. Par contre les variables peuvent y être passées par référence.

Donc si votre procédure imbriquée avait un argument au départ (disons arg1), vous deviez l'avoir ainsi :
Code :
 CREATE PROCEDURE CreerClient(IN arg1)
Désormais notez là ainsi :
Code :
1
2
3
4
5
6
 CREATE PROCEDURE CreerClient(IN varchar(32) arg1, out int code, out varchar(32) lib)
BEGIN
 ...
 SET CODE = 3;
 SET LIB = 'Client créé';
END
Dans votre code de la procédure stockée faites ainsi
Code :
1
2
3
4
5
6
7
CREATE PROCEDURE TOTO()
BEGIN
  DECLARE CODE AS INT;
  DECLARE MESSAGE AS VARCHAR(32);
  CALL CreerClient('client toto',CODE ,MESSAGE);
  -- Ici code et message sont valuées par la procédure stockée
END
Cela fait un moment que je n'utilise plus MySQL. Mais MySQL respecte assez bien la norme la dessus (contrairement à ce satané oracle) et je ne suis plus sur de l'ordre de déclarations des paramètres. Je crois que c'est :
1-> in|out|inout
2-> le type de données
3-> le nom de la variable
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T 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 01h26.


 
 
 
 
Partenaires

Hébergement Web