Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment appeler une procédure stockée MySQL depuis Rails ?

MODIF :

--

Utilisation de ActiveRecord::Base.connections.exec_query() est pour autant que je puisse en dire BEAUCOUP meilleure approche simplement parce qu'elle renvoie un tableau de hachages comme on pourrait s'y attendre, ce qui ActiveRecord::Base.connections.execute ne fait pas.

Documentation

--

Veuillez lire la modification ci-dessus, je laisse ci-dessous pour référence.

Bien que je réalise que cette question est assez ancienne et parce que les liens publiés par ohho ont 404'd, j'ai eu cette même erreur récemment.

J'ai pu le réparer en procédant comme suit :

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

Une fois que vous avez effacé les connexions, vous pouvez exécuter toute autre requête où, comme auparavant, elle aurait échoué en essayant d'accéder à la base de données via des rails ou une autre procédure stockée.

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

--EDIT :

Il convient également de mentionner qu'il ne faut pas stocker la connexion ActiveRecord dans une variable selon le message de leente sur ce lien

"Ne le cachez pas !

Ne stockez pas une connexion dans une variable, car un autre thread pourrait essayer de l'utiliser alors qu'il est déjà réenregistré dans le pool de connexions. Voir :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)