从rails中的mysql存储过程中获取多个结果集
我一直在寻找有关这方面的提示,到目前为止还没有真正的运气。 使用mysql2 gem,尝试执行返回多个结果集的存储过程使我无法返回此上下文错误中的结果。 我发现有人建议使用mysql gem(我无法找到解释两者之间的差异以及切换时可能会遇到的内容),并且我已经有了更多的进展。
这是我到目前为止所拥有的:
>> db = ActiveRecord::Base.connection.raw_connection => # >> 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或mysqlgem? 该应用程序正在运行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。
我们可以使用header.to_hash
来获取一个hash数组或header.rows
来获取一个数组数组。
请关注此http://api.rubyonrails.org/classes/ActiveRecord/Result.html