sql >> Databasteknik >  >> RDS >> Mysql

Hur ringer man upp MySQL lagrad procedur från Rails?

EDIT:

--

Använder ActiveRecord::Base.connections.exec_query() är så vitt jag kan säga MYCKET bättre tillvägagångssätt bara för att den returnerar en uppsättning hash som man kan förvänta sig, som ActiveRecord::Base.connections.execute gör inte.

Dokumentation

--

Vänligen läs redigeringen ovan, jag lämnar nedanstående som referens.

Även om jag inser att den här frågan är ganska gammal och eftersom länkarna ohho postade har 404'd, hade jag samma fel nyligen.

Jag kunde fixa det genom att göra följande:

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

När du har rensat anslutningar kan du köra andra frågor där det som tidigare skulle ha misslyckats när du försökte komma åt databasen via rails eller annan lagrad proc.

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

--EDIT:

Det är också värt att nämna att man inte bör lagra ActiveRecord-anslutningen i en variabel enligt leentes inlägg på denna länk

"Cachelagra det inte!

Lagra inte en anslutning i en variabel, eftersom en annan tråd kan försöka använda den när den redan har checkats in i anslutningspoolen igen. Se: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. Hur räknar man antalet förekomster av en karaktär i ett Oracle-varchar-värde?

  2. går det snabbare att läsa från MySQL eller går det snabbare att läsa från en fil?

  3. Flask-SQLAlchemy - När skapas och förstörs tabellerna/databaserna?

  4. Övervakning av tillgänglighet Grupprepliksynkronisering