2012-02-29 64 views
0

在rails(3.2.1,mysql2)应用程序中,我想调用并显示过程的结果 我谷歌和尝试差异的方式,但没有运气,问题是还在这里同样是一小段代码片段我使用调用程序PROCEDURE不能返回给定的上下文中的结果集

ActiveRecord::Base.connection.execute("call sp_name(1,10)") 
以下

的错误我得到执行此代码

Mysql2::Error: PROCEDURE sp_name can't return a result set in the given  
context: call sp_name(1, 10) 
ActiveRecord::StatementInvalid: Mysql2::Error: PROCEDURE sp_name can't  
return a result set in the given context: call user_childs(1, 10) 
from /home/ankit/.rvm/gems/ruby-1.9.2-p290/gems/activerecord- 
3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:233:in `query' 
from /home/ankit/.rvm/gems/[email protected]/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:233:in `block in execute' 
from /home/ankit/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log' 
from /home/ankit/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
from /home/ankit/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log' 
from /home/ankit/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:233:in `execute' 
from /home/ankit/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:214:in `execute' 
+0

叉我认为这更多的是比MySQL的轨道。你应该添加适当的标签并提供程序代码,以便mysql专家可以回答。 – Ineu 2012-02-29 16:14:38

回答

1

这是一个众所周知的问题,使用Rails,请参阅本blog post更多细节。

我个人在我的一些应用程序中使用了以下gist中的代码。

如果你想在你的Rails代码使用多个结果集,你可以用我的mysql2 gem

+0

是的,这个帖子帮了我。 Rails的最新版本必须默认使用它,不确定为什么Rails团队希望避免使用该过程。可能不是它的方式,但程序在很多情况下都是救命恩人。无论如何感谢您的时间和帮助。 – 2012-03-01 10:13:44

+0

我想铁轨的理念是数据库不可知的,并且由于存储过程并不是在任何地方都可用,所以它们不需要受感应的Rails – Wolfgang 2012-03-01 18:05:24

+0

的支持:) – 2012-03-02 06:37:16