2010-08-16 126 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