我从我的模型调用存储过程(MySQL)。此存储过程返回结果集,但我收到此错误...
Mysql2 ::错误:程序 my_db.sp_venue_nearby_with_questions 无法返回给定的结果集 上下文:....
这是我使用的rails代码 -
connection.select_all("call sp_some_proc()")
我也试过“connection.execute”,也失败了。我已经成功地从我的模型中调用了另一个存储过程,但是那个没有返回结果集。
答案 0 :(得分:2)
我尝试使用MySQL 2 gem,它在Rails 3中默认使用,并得到了类似的错误。问题是默认情况下MySQL 2 gem不使用MULTI_STATEMENTS,当您想要从过程中获取结果集时,需要使用它。
经过一番调查后,我决定坚持使用adapter:mysql
中的原始MySQL gem(adapter:mysql2
而不是database.yml
),这似乎也适用于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.each do |entry|
puts entry.name
puts entry.extra_column_from_sp
end
请注意,您可以在SP中添加额外的列。这些额外的列将始终为“String”类型,因此您可能需要转换它们,例如约会。