2010-11-08 15 views
5

Ho cercato dappertutto consigli su questo e finora non ho avuto davvero fortuna. Con la gemma mysql2, provare ad eseguire una stored procedure che restituisce più set di risultati mi dà la possibilità di restituire risultati in questo errore di contesto. Ho scoperto che qualcuno aveva suggerito di usare la gemma mysql invece (che non riesco a trovare una spiegazione di ciò che è diverso tra i due e quello che potrei incontrare cambiando), e con ciò ho avuto più progressi.recupero di più set di risultati da mysql stored procedure in rotaie

Ecco quello che ho finora:

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

Qualcuno sa di un modo per ottenere questo lavoro, con mysql2 o MySQL gemme? L'app esegue le guide 3.0.1.

risposta

4

Ok bene non ho capito come ottenere AR a fare questo in modo ho finito solo andando a basso livello e utilizzando il driver mysql stesso, che lavora per lo più ...

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! 

Funziona , ma non riesco a immaginare che non ci sia un modo migliore. Inoltre devo riconnettermi dopo questo o ottengo un errore sulla prossima query, e non ho trovato un modo per chiudere correttamente la sessione. Oh e devo usare la gemma mysql e non mysql2.

Grrrrr.

Problemi correlati