2010-11-08 23 views
5

Przez cały czas szukałem wskazówek na ten temat i do tej pory nie miałem żadnego szczęścia. Dzięki klejnotowi mysql2 próba wykonania procedury przechowywanej, która zwraca wiele zestawów wyników, daje mi brak możliwości zwrócenia wyników w tym kontekście błędu. Zauważyłem, że ktoś zasugerował użycie klejnotu mysql (nie mogę znaleźć wyjaśnienia różnic pomiędzy tymi dwoma i tego, co może się przydarzyć, przełączając się) i dzięki temu miałem większy postęp.pobieranie wielu zestawów wyników z procedury przechowywanej mysql w szynach

Oto co mam do tej pory:

>> 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 

Czy ktoś zna sposób, aby uzyskać to do pracy, z mysql2 lub MySQL klejnotów? Aplikacja obsługuje tory 3.0.1.

Odpowiedz

4

Ok dobrze nie mam zorientowali się, jak dostać się do AR to więc już skończyło się właśnie dzieje niskim poziomie i przy użyciu samego sterownika MySQL, które najczęściej uczynków ...

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! 

Działa , ale nie mogę sobie wyobrazić, że nie ma lepszego sposobu. Muszę też połączyć się ponownie po tym lub otrzymam błąd w następnym zapytaniu i nie znalazłem sposobu na prawidłowe zamknięcie sesji. Och i muszę użyć mysql gem, a nie mysql2.

Grrrrr.

Powiązane problemy