有沒有一種使用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