【问题标题】:fetching multiple result sets from mysql stored procedure in rails从rails中的mysql存储过程中获取多个结果集
【发布时间】:2010-11-08 23:10:22
【问题描述】:

我一直在寻找这方面的技巧,但到目前为止还没有真正的运气。使用 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 gems 的方法?该应用正在运行 rails 3.0.1。

【问题讨论】:

    标签: mysql ruby-on-rails ruby stored-procedures ruby-on-rails-3


    【解决方案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。

    咕噜咕噜。

    【讨论】:

      【解决方案2】:

      我们可以使用header.to_hash 得到一个哈希数组,或者header.rows 得到一个数组数组。

      关注这个http://api.rubyonrails.org/classes/ActiveRecord/Result.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 2010-11-13
        • 1970-01-01
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多