5

Я искал все советы для этого и пока не имел никакой удачи. С помощью mysql2 gem попытка выполнить хранимую процедуру, которая возвращает несколько наборов результатов, дает мне неспособность вернуть результаты в эту ошибку контекста. Я обнаружил, что кто-то предложил вместо этого использовать mysql gem (что я не могу найти объяснения того, что между ними и чем я могу столкнуться), и с этим я добился большего прогресса.извлечение множества наборов результатов из хранимой процедуры mysql в рельсах

Вот что я до сих пор:

>> db = ActiveRecord::Base.connection.raw_connection 
=> #<Mysql:0x1056ae3d8> 
>> ActiveRecord::Base.connection.select_all("CALL p_rpt_test('', '');") 
=> [{"Header"=>"Client,Project,Type,Due Date,Assigned To"}] 
>> db.more_results? 
=> true 
>> db.next_result 
Mysql::Error: Commands out of sync; you can't run this command now 
     from (irb):3:in `next_result' 
     from (irb):3 

Кто-нибудь знает способ, чтобы получить эту работу, с mysql2 или MySQL драгоценных камней? Приложение работает с рельсами 3.0.1. не

ответ

4

Хорошо хорошо я не понял, как получить AR, чтобы сделать это, так что я в конечном итоге только собирается низкий уровень и используя сам драйвер MySQL, который в основном работает ...

data = Array.new 
db = ActiveRecord::Base.connection.raw_connection 
header = db.query("CALL #{self.proc}(#{args});") 
header.each {|r| data << r} 
if db.next_result 
    rows = db.store_result 
    rows.each {|r| data << r} 
end 

ActiveRecord::Base.connection.reconnect! 

Он работает , но я не могу представить, что нет лучшего способа. Кроме того, я должен снова подключиться после этого или я получаю сообщение об ошибке в следующем запросе, и я не нашел способ правильно закрыть сеанс. О, и я должен использовать gem mysql, а не mysql2.

Grrrrrr.

Смежные вопросы