Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да извикам MySQL съхранена процедура от Rails?

РЕДАКТИРАНЕ:

--

Използване на ActiveRecord::Base.connections.exec_query() е, доколкото мога да кажа, доМНОГО по-добър подход, само защото връща масив от хешове, както може да се очаква, които ActiveRecord::Base.connections.execute не.

Документация

--

Моля, прочетете редакцията по-горе, оставям по-долу за справка.

Въпреки че осъзнавам, че този въпрос е доста стар и тъй като връзките, публикувани от ohho, имат 404, имах същата грешка наскоро.

Успях да го поправя, като направих следното:

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

След като изчистите връзките, можете да изпълнявате всякакви други заявки, при които както преди, опитът за достъп до базата данни през релсите или друг съхранен процес би бил неуспешен.

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

--РЕДАКТИРАНЕ:

Също така си струва да се спомене, че не трябва да съхранявате връзката ActiveRecord в променлива според публикацията на leente в този връзка

„Не го кеширайте!

Не съхранявайте връзка в променлива, защото друга нишка може да се опита да я използва, когато вече е регистрирана обратно в пула за връзки. Вижте: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. Как да изчислим дните между две дати в PHP?

  2. Попълнете полето за избор от базата данни с помощта на jQuery

  3. Условия за състезание на MySQL

  4. mysqldump не работи в cron

  5. SQLite - ПОРЪЧАЙТЕ ПО RAND()