2010-08-16 5 views
1

Existe-t-il un moyen de créer par programme des procédures stockées à l'aide de MySQL? Je peux écrire une procédure stockée pour créer des bases de données et des tables en utilisant des instructions préparées, mais je reçois un message d'erreur indiquant qu'il n'est pas pris en charge pour créer des procédures stockées avec des instructions préparées. Je réalise que je peux le faire en PHP ou en Java, mais jusqu'à présent, j'ai gardé tous mes outils de gestion de schéma en tant que scripts SQL, et je voudrais éviter une dépendance de langue seconde si je le peux.Création de procédures stockées MySQL à l'aide de MySQL

Répondre

1

Une méthode que vous pouvez essayer est de générer dynamiquement l'instruction create procedure dans SQL, puis d'utiliser select into outfile pour vider l'instruction sur le disque local, puis de rechercher le fichier pour charger la procédure dans la base de données.

Voici un exemple rapide:

set @proc_name = 'my_proc'; 
set @body1 = 'select ''hello''; '; 
set @body2 = 'select ''world''; '; 
set @delimiter = '$$'; 

set @create_proc_stmt = concat(
    'create procedure ', 
    @proc_name, 
    '() begin ', 
    @body1, 
    @body2, 
    ' end ', 
    @delimiter 
); 

select @create_proc_stmt into outfile '/tmp/create_proc_stmt.sql'; 

delimiter $$ 
\. /tmp/create_proc_stmt.sql 
delimiter ; 

call my_proc(); 
1

Je pense que vous pouvez le faire en insérant un enregistrement dans le tableau INFORMATION_SCHEMA.ROUTINES. Je ne l'ai pas essayé, mais cela devrait fonctionner (un jour dans le passé j'ai oublié d'ajouter --routines à mysqldump, et plus tard j'ai restauré toutes les procédures en vidant cette table).

+0

Merci pour la suggestion - malheureusement, il semble que INFORMATION_SCHEMA est une lecture seule table: http://dev.mysql.com/doc/refman/5.0/en/ information-schema.html – jnoss

Questions connexes