有没有一种使用MySQL以编程方式创建存储过程的方法?我可以编写一个存储过程以使用预准备语句创建数据库和表,但是我收到一条错误消息,指出不支持使用预准备语句创建存储过程。使用MySQL创建MySQL存储过程
我意识到我可以在PHP或Java中执行此操作,但到目前为止,我一直将所有模式管理工具都保存为SQL脚本,并且如果可以的话,我想避免第二种语言依赖。
有没有一种使用MySQL以编程方式创建存储过程的方法?我可以编写一个存储过程以使用预准备语句创建数据库和表,但是我收到一条错误消息,指出不支持使用预准备语句创建存储过程。使用MySQL创建MySQL存储过程
我意识到我可以在PHP或Java中执行此操作,但到目前为止,我一直将所有模式管理工具都保存为SQL脚本,并且如果可以的话,我想避免第二种语言依赖。
您可以尝试的一种方法是在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();
我认为你可以通过在INFORMATION_SCHEMA.ROUTINES
表中插入一条记录来实现。我没有尝试过,但它应该工作(过去的一天我忘了添加 - 例程切换到mysqldump,后来我通过转储这个表来恢复所有的过程)。
感谢您的建议 - 不幸的是,似乎INFORMATION_SCHEMA是一个只读表: http://dev.mysql.com/doc/refman/5.0/en/信息schema.html – jnoss 2010-08-16 22:23:12