现在的位置: 首页 > 综合 > 正文

rails调用mysql存储过程问题

2013年08月10日 ⁄ 综合 ⁄ 共 931字 ⁄ 字号 评论关闭

最近项目有个需求,在ROR开发中用视图和存储过程

由于我们考虑使用视图,而在rails迁移文件有create_table方法,所以我们得找到能否在迁移文件里面创建视图 (create_view方法),通过查找rails2.3.5 api并没有找到方法 
由于项目需求中涉及很多计算,从性能上考虑,我们准备使用存储过程,通过查找rails调用mysql存储过程的相关资料,得出的结论是:存储过程要在mysql端手动创建,在rails中只能调用返回单结果集的存储过程,相关代码如下: 
返回单结果集: 
创建存储过程 
Max_grade() 
CREATE DEFINER=`root`@`localhost` PROCEDURE `Max_grade`() 
BEGIN 
SELECT id FROM students WHERE grade_point_average=4; 
END;

rails端调用: 
def procedure 
sql=ActiveRecord::Base.connection(); 
@result=sql.select_value('call Max_grade()'); 

respond_to do |format| 
format.html 
format.xml { render :xml => @result} 
end 
end 
在procedure.html.erb文件中的代码为<%=@result%>,页面就显示 2

返回多结果集:

创建存储过程 
Max_grade() 
CREATE DEFINER=`root`@`localhost` PROCEDURE `Max_grade`() 
BEGIN 
SELECT * FROM students WHERE grade_point_average=4; 
END;

rails端调用:

def edit 
@student = Student.find_by_sql('call Max_grade()'); 
end

这样在进入edit.html.erb页面时就显示错误 “Mysql::Error: Commands out of sync; you can't run this command now: SHOW FIELDS FROM `students`” 

查找一些资料 并没有找到解决办法

抱歉!评论已关闭.