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

Hvordan kalder man MySQL-lagret procedure fra Rails?

EDIT:

--

Brug af ActiveRecord::Base.connections.exec_query() er så vidt jeg kan sige MEGET bedre tilgang, bare fordi den returnerer en række hashes, som man kunne forvente, som ActiveRecord::Base.connections.execute gør ikke.

Dokumentation

--

Læs venligst redigeringen ovenfor. Jeg efterlader nedenstående som reference.

Mens jeg er klar over, at dette spørgsmål er ret gammelt, og fordi de links, ohho har lagt ud, har 404'd, havde jeg den samme fejl for nylig.

Jeg var i stand til at rette det ved at gøre følgende:

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

Når du har ryddet forbindelser, kan du køre alle andre forespørgsler, hvor det som før ville have mislykkedes ved at forsøge at få adgang til databasen gennem skinner eller en anden lagret proc.

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

--EDIT:

Det er også værd at nævne, at man ikke bør gemme ActiveRecord-forbindelsen i en variabel som pr. leentes indlæg på denne link

"Lad være med at cache det!

Gem ikke en forbindelse i en variabel, fordi en anden tråd måske forsøger at bruge den, når den allerede er tjekket ind i forbindelsespuljen 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. Kan en databasetabel være uden en primær nøgle?

  2. Brug af varchar(MAX) vs TEXT på SQL Server

  3. Brug af Sysbench til at generere testdata til Sharded Table i MySQL

  4. Hvordan bestiller mysql rækker med samme værdi?