Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wywołać procedurę składowaną MySQL z Railsów?

EDYTUJ:

--

Korzystanie z ActiveRecord::Base.connections.exec_query() jest na tyle, na ile mogę powiedzieć, DUŻO lepsze podejście tylko dlatego, że zwraca tablicę skrótów, jak można by się spodziewać, które ActiveRecord::Base.connections.execute nie.

Dokumentacja

--

Proszę przeczytać powyższą edycję, poniżej zostawiam jako odniesienie.

Chociaż zdaję sobie sprawę, że to pytanie jest dość stare, a ponieważ zamieszczone linki ohho mają 404, ostatnio miałem ten sam błąd.

Udało mi się to naprawić, wykonując następujące czynności:

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

Po wyczyszczeniu połączeń możesz uruchomić dowolne inne zapytania tam, gdzie, jak wcześniej, nie udałoby się uzyskać dostępu do bazy danych przez szyny lub inną zapisaną procedurę.

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

--EDYCJA:

Warto również wspomnieć, że nie należy przechowywać połączenia ActiveRecord w zmiennej, jak w poście leente na ten link

"Nie buforuj tego!

Nie przechowuj połączenia w zmiennej, ponieważ inny wątek może próbować go użyć, gdy jest już ponownie zaewidencjonowany w puli połączeń. Zobacz: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) 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie MySQL DATETIME DIFF

  2. Nie określono lokalizacji pliku konfiguracyjnego MySQL (np. my.cnf)

  3. Jak zaktualizować wiele kolumn w MySQL

  4. MySQL:duży VARCHAR kontra TEXT?

  5. MySQL nie może dodać ograniczenia klucza obcego