rails调用mysql存储过程问题

最近项目有个需求,在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`” 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值