Я попробовал то же самое с гемом MySQL 2, который используется по умолчанию в Rails 3, и получил похожую ошибку.Проблема в том, что гем MySQL 2 по умолчанию не использует MULTI_STATEMENTS, который необходим, когда вы хотите получить набор результатов обратно из процедуры.
После некоторого исследования я решил придерживаться оригинального MySQLgem (adapter:mysql
вместо 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», поэтому вам может потребоваться преобразовать их, например, в дату.