2010-08-16 118 views
1

有没有一种使用MySQL以编程方式创建存储过程的方法?我可以编写一个存储过程以使用预准备语句创建数据库和表,但是我收到一条错误消息,指出不支持使用预准备语句创建存储过程。使用MySQL创建MySQL存储过程

我意识到我可以在PHP或Java中执行此操作,但到目前为止,我一直将所有模式管理工具都保存为SQL脚本,并且如果可以的话,我想避免第二种语言依赖。

回答

1

您可以尝试的一种方法是在SQL中动态构建create procedure语句,然后使用select into outfile将该语句转储到本地磁盘,然后源文件将该过程加载到数据库中。

这里有一个简单的例子:

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

我认为你可以通过在INFORMATION_SCHEMA.ROUTINES表中插入一条记录来实现。我没有尝试过,但它应该工作(过去的一天我忘了添加 - 例程切换到mysqldump,后来我通过转储这个表来恢复所有的过程)。

+0

感谢您的建议 - 不幸的是,似乎INFORMATION_SCHEMA是一个只读表: http://dev.mysql.com/doc/refman/5.0/en/信息schema.html – jnoss 2010-08-16 22:23:12