我一直在到处寻找这方面的技巧,但到目前为止还没有真正的运气。使用 mysql2 gem,尝试执行返回多个结果集的存储过程会给我一个 unable to return results in this context 错误。我发现有人建议改用 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 gems 让它工作的方法吗?该应用程序正在运行 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!
它有效,但我无法想象没有更好的方法。此外,在此之后我必须重新连接,否则我在下一个查询中会出错,而且我还没有找到正确关闭 session 的方法。哦,我必须使用 mysql gem 而不是 mysql2。
呜呜呜。
关于mysql - 从 rails 中的 mysql 存储过程中获取多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129025/