Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Rails 3调用MySQL存储过程(返回resultset)时出错_Mysql_Ruby On Rails_Stored Procedures_Activerecord - Fatal编程技术网

从Rails 3调用MySQL存储过程(返回resultset)时出错

从Rails 3调用MySQL存储过程(返回resultset)时出错,mysql,ruby-on-rails,stored-procedures,activerecord,Mysql,Ruby On Rails,Stored Procedures,Activerecord,我正在从我的模型调用一个存储过程(MySQL)。此存储过程返回一个resultset,但我得到此错误 Mysql2::错误:过程 my_db.sp_场地附近有问题 无法返回给定值中的结果集 背景: 以下是我使用的rails代码- connection.select_all("call sp_some_proc()") 我也尝试过“connection.execute”,但也失败了。我已经成功地从我的模型中调用了另一个存储过程,但该过程没有返回结果集。我在MySQL 2 gem上尝试了同样的方法

我正在从我的模型调用一个存储过程(MySQL)。此存储过程返回一个resultset,但我得到此错误

Mysql2::错误:过程 my_db.sp_场地附近有问题 无法返回给定值中的结果集 背景:

以下是我使用的rails代码-

connection.select_all("call sp_some_proc()")

我也尝试过“connection.execute”,但也失败了。我已经成功地从我的模型中调用了另一个存储过程,但该过程没有返回结果集。

我在MySQL 2 gem上尝试了同样的方法,该gem默认在Rails 3中使用,并得到了类似的错误。问题是MySQL 2 gem在默认情况下不使用MULTI_语句,当您想要从过程中获取结果集时,需要使用MULTI_语句

经过一些调查,我决定继续使用原始的MySQL gem(
adapter:MySQL
,而不是
database.yml
中的
adapter:mysql2
),它似乎在Rails 3中也能正常工作

下面是我从存储过程到ActiveRecord类的结果:

db = ActiveRecord::Base.connection.raw_connection
entries = Entry.find_by_sql( 'CALL sp_get_all_entries()' )

# we need to flush the result set otherwise following SQL statements cannot be processed
db.next_result if ( db.more_results? )
现在,存储过程返回的行将在entries对象上可用,例如

entries.each do |entry|
    puts entry.name
    puts entry.extra_column_from_sp
end

请注意,您可以在SP中添加额外的列。这些额外的列将始终是“String”类型,因此您可能需要将它们转换为日期。

我已经将mysql2 gem分叉,以便也支持存储过程。看见