Mysql
 sql >> Database >  >> RDS >> Mysql

Come chiamare la stored procedure MySQL da Rails?

MODIFICA:

--

Utilizzando ActiveRecord::Base.connections.exec_query() è per quanto posso dire un MOLTO approccio migliore solo perché restituisce una matrice di hash come ci si aspetterebbe, che ActiveRecord::Base.connections.execute non.

Documentazione

--

Leggi la modifica sopra, lascio quanto segue come riferimento.

Anche se mi rendo conto che questa domanda è piuttosto vecchia e poiché i collegamenti pubblicati da ohho hanno 404'd, di recente ho riscontrato lo stesso errore.

Sono stato in grado di risolverlo procedendo come segue:

result = ActiveRecord::Base.connection.execute("call example_proc()") ActiveRecord::Base.clear_active_connections!

Dopo aver cancellato le connessioni, puoi eseguire qualsiasi altra query dove, come prima, non sarebbe riuscito ad accedere al database tramite binari o un altro processo memorizzato.

http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class

--EDIT:

Vale anche la pena ricordare che non si dovrebbe memorizzare la connessione ActiveRecord in una variabile come da post di leente su questo collegamento

"Non memorizzarlo nella cache!

Non archiviare una connessione in una variabile, perché un altro thread potrebbe tentare di utilizzarla quando è già stato archiviato di nuovo nel pool di connessioni. Vedi:ConnectionPool "

connection = ActiveRecord::Base.connection   #WRONG

threads = (1..100).map do
 Thread.new do
begin
  10.times do
    connection.execute("SELECT SLEEP(1)")  # WRONG
    ActiveRecord::Base.connection.execute("SELECT SLEEP(1)")  # CORRECT
  end
  puts "success"
rescue => e
  puts e.message
   end
  end
end

threads.each(&:join)