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

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

我一直在到处寻找这方面的技巧,但到目前为止还没有真正的运气。使用 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/

相关文章:

javascript - 带有包含表单的 Bootstrap 模态视图的 Rails 应用程序,提交和消失模态视图而无需重新加载页面

ruby-on-rails - 在 Sonar 插件中调试 Ruby 和 Rails 代码

ruby-on-rails - 如何使用 CloudHSM 在 Ruby 中实现双向 TLS(客户端)

ruby - 如何包含 Ruby Gems 的查找路径?

mysql - 将平面文件数据库传输到 MySQL 数据库

ruby-on-rails - 使用 nginx 反向代理的 Puma 静默崩溃

php - mySQL查询复杂的连接产生随机和错误的数字

ruby-on-rails - rails 3 : Detecting types when parsing XML

javascript - 使用带有 AJAX 的 PHP 将 JS 变量插入 MySQL 表时出现问题

PHP/Laravel SQLSTATE[HY000] [2002] 使用 docker-compose 和 MySql 无标准端口时没有此类文件或目录