2010-11-08 14 views
5

Ich habe überall nach Tipps zu diesem Thema gesucht und hatte bisher nicht wirklich Glück gehabt. Mit dem mysql2-Juwel kann ich bei der Ausführung einer gespeicherten Prozedur, die mehrere Ergebnismengen zurückgibt, keine Ergebnisse in diesem Kontextfehler zurückgeben. Ich fand heraus, dass jemand vorgeschlagen hatte, stattdessen das mysql-Juwel zu verwenden (was ich keine Erklärung dafür finden kann, was zwischen den beiden anders ist und was ich beim Wechsel erfahren könnte), und damit hatte ich mehr Fortschritte.holen mehrere Ergebnismengen von mysql gespeicherte Prozedur in Schienen

Hier ist, was ich bisher:

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

Kennt jemand eine Möglichkeit, dies umgehen zu arbeiten, mit mysql2 oder mysql Edelsteine? Die App läuft rails 3.0.1.

Antwort

4

Ok gut ich habe nicht herausgefunden, wie AR zu bekommen, dies zu tun, also habe ich einfach weiter niedriges Niveau und mit dem MySQL-Treiber selbst, die meist funktioniert ...

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! 

Es endet funktioniert Aber ich kann mir nicht vorstellen, dass es keinen besseren Weg gibt. Außerdem muss ich mich danach neu verbinden oder ich bekomme einen Fehler bei der nächsten Abfrage, und ich habe keine Möglichkeit gefunden, die Sitzung ordnungsgemäß zu schließen. Oh, und ich muss das mysql-Juwel und nicht mysql2 verwenden.

Grrrrr.

Verwandte Themen