Mysql 运行给出错误的存储过程可以';t返回给定上下文中的结果集

Mysql 运行给出错误的存储过程可以';t返回给定上下文中的结果集,mysql,ruby-on-rails,ruby-on-rails-3,stored-procedures,Mysql,Ruby On Rails,Ruby On Rails 3,Stored Procedures,我知道这个问题已经被问过很多次了。但我尝试了这些解决方案,但它们对我不起作用。我有一个基于rails 3.2.12和ruby 1.9.2p180构建的web应用程序。我在其中有一个存储过程,它返回一个具有5个内部联接的查询的数据。在本例中,返回了大约600行。在本地,存储过程运行良好,没有问题。但当我在服务器上尝试时,它会抛出: ActiveRecord::StatementInvalid: Mysql2::Error: PROCEDURE test.sp_procedure can't ret

我知道这个问题已经被问过很多次了。但我尝试了这些解决方案,但它们对我不起作用。我有一个基于rails 3.2.12和ruby 1.9.2p180构建的web应用程序。我在其中有一个存储过程,它返回一个具有5个内部联接的查询的数据。在本例中,返回了大约600行。在本地,存储过程运行良好,没有问题。但当我在服务器上尝试时,它会抛出:

ActiveRecord::StatementInvalid: Mysql2::Error: PROCEDURE test.sp_procedure can't return a result set in the given context: call sp_procedure('2015-02-14 00:00:00 -0500', '2015-03-03 23:59:00 -0500', 5, '13')
我搜索了这个问题,发现在建立到MySQL服务器的连接时需要设置CLIENT_MULTI_RESULTS标志。为此,我做了猴子修补说。以下是初始值设定项中的文件:

module ActiveRecord
class Base
def self.mysql2_connection(config)
  config[:username] = 'deploy' if config[:username].nil?

  if Mysql2::Client.const_defined? :FOUND_ROWS
    config[:flags] = config[:flags] ? config[:flags] | Mysql2::Client::FOUND_ROWS : Mysql2::Client::FOUND_ROWS
  end

  client = Mysql2::Client.new(config.symbolize_keys)
  options = [config[:host], config[:username], config[:password], config[:database], config[:port], config[:socket], 0]
  ConnectionAdapters::Mysql2Adapter.new(client, logger, options, config)
end

def self.select_sp(sql, name = nil)
  connection = ActiveRecord::Base.connection
  begin
    connection.select_all(sql, name)
  rescue NoMethodError
  ensure
    connection.reconnect! unless connection.active?
  end
end
end
end
在我的
数据库.yml
中,我添加了:
标志:
,并尝试使用
标志:131072
。但它不起作用

但是,使用以下工程:

client = Mysql2::Client.new(:host => "localhost", :username => "root", :flags => Mysql2::Client::MULTI_STATEMENTS )
result = client.query( 'CALL sp_procedure('2015-02-14 00:00:00 -0500', '2015-03-03 23:59:00 -0500', 5, '13')')
这在服务器上也起作用。但是每次存储过程运行时,它都会创建一个我不想要的新连接

还有一件事需要注意,当我在本地执行此操作时,只要调用存储过程,我就必须执行以下操作:

ActiveRecord::Base.connection.reconnect!
如果我不写这个,它会抛出一个错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Commands out of sync; you can't run this command now
所以这也是同样的意思,它每次都会创建一个新的连接。因此,我正在寻找一个解决方案,使我免于这样做。
如果猴子的补丁是正确的,那么我错过了什么。请帮忙

这对你有什么帮助吗。?还要检查一下:感谢您的回复,但是我的存储过程是正确的,并且它从mysql控制台运行,并在那里返回行