2010-10-11 37 views
0

我正在調用模型中的存儲過程(MySQL)。此存儲過程返回一個結果,但我得到這個錯誤...調用MySQL時的錯誤Rails 3的存儲過程(返回結果集)

Mysql2::Error: PROCEDURE my_db.sp_venue_nearby_with_questions can't return a result set in the given context:....

這裏的Rails代碼我使用 -

connection.select_all("call sp_some_proc()") 

我已經試過「connection.execute」爲好,還是失敗,好。我已經成功地從我的模型中調用另一個存儲過程,但那個不返回結果集。

回答

2

我嘗試了與默認情況下在Rails 3中使用的MySQL 2 gem相同的東西,並得到了類似的錯誤。問題是,默認情況下,MySQL 2 gem不使用當您想從過程中獲取結果集時所需的MULTI_STATEMENTS。

經過一番研究,我決定堅持原來的MySQL寶石(adapter:mysql,而不是在database.ymladapter: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.each do |entry| 
    puts entry.name 
    puts entry.extra_column_from_sp 
end 

請注意,您可以在SP中添加額外的列。那些額外的列總是「String」類型,所以你可能需要轉換它們,例如,到一個約會。

+0

我已經分叉了mysql2 gem以支持存儲過程。請參閱https://github.com/wok/mysql2 – Wolfgang 2011-11-22 19:38:26