5

He estado buscando consejos sobre esto y hasta ahora no he tenido suerte. Con la gema mysql2, intentar ejecutar un procedimiento almacenado que devuelve múltiples conjuntos de resultados me da la incapacidad de devolver resultados en este contexto de error. Descubrí que alguien había sugerido usar la gema mysql (que no puedo encontrar una explicación de lo que es diferente entre los dos y lo que podría encontrar al cambiar), y con eso he tenido más progreso.obteniendo varios conjuntos de resultados del procedimiento almacenado de mysql en los rieles

Esto es lo que tengo hasta ahora:

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

¿Alguien sabe de una manera de conseguir que esto funcione, con mysql2 o MySQL gemas? La aplicación está ejecutando rails 3.0.1.

Respuesta

4

Ok, así que no han descubierto la manera de obtener AR hacer esto, así que he terminado sólo va bajo nivel y mediante el controlador de MySQL en sí, que trabaja sobre todo ...

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! 

Funciona , pero no puedo imaginar que no haya una mejor manera. También tengo que volver a conectar después de esto u obtengo un error en la próxima consulta, y no he encontrado la forma de cerrar la sesión correctamente. Ah, y tengo que usar la gema mysql y no mysql2.

Grrrrr.

Cuestiones relacionadas