从rails中的mysql存储过程中获取多个结果集

前端之家收集整理的这篇文章主要介绍了从rails中的mysql存储过程中获取多个结果集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直在寻找这方面的提示,到目前为止还没有真正的运气.使用mysql2 gem,尝试执行返回多个结果集的存储过程使我无法返回此上下文错误中的结果.我发现有人建议使用MysqL gem(我无法找到两者之间有什么不同以及切换时可能遇到的内容的解释),并且我已经有了更多的进展.

这是我到目前为止所拥有的:

>> db = ActiveRecord::Base.connection.raw_connection
=> #<MysqL:0x1056ae3d8>
>> ActiveRecord::Base.connection.select_all("CALL p_rpt_test('','');")
=> [{"Header"=>"Client,Project,Type,Due Date,Assigned To"}]
>> db.more_results?
=> true
>> db.next_result
MysqL::Error: Commands out of sync; you can't run this command now
        from (irb):3:in `next_result'
        from (irb):3

有没有人知道如何使用MysqL2或MysqL宝石来实现这一点?该应用程序正在运行rails 3.0.1.

最佳答案
好吧我还没弄明白如何让AR这样做所以我最终只是进入低级并使用MysqL驱动程序本身,这主要是工作…

data = Array.new
db = ActiveRecord::Base.connection.raw_connection
header = db.query("CALL #{self.proc}(#{args});")
header.each {|r| data << r}
if db.next_result
  rows = db.store_result
  rows.each {|r| data << r}
end

ActiveRecord::Base.connection.reconnect!

它有效,但我无法想象没有更好的方法.此外,我必须在此之后重新连接,或者我在下一个查询中收到错误,并且我还没有找到正确关闭会话的方法.哦,我必须使用MysqL gem而不是MysqL2.

Grrrrr.

猜你在找的MySQL相关文章