sql >> Database >  >> RDS >> Mysql

Hoe de MySQL-opgeslagen procedure van Rails aan te roepen?

BEWERKEN:

--

ActiveRecord::Base.connections.exec_query() gebruiken is voor zover ik kan zien een VEEL betere benadering alleen omdat het een array van hashes retourneert zoals men zou verwachten, die ActiveRecord::Base.connections.execute doet niet.

Documentatie

--

Lees de bewerking hierboven, ik laat de onderstaande voor referentie.

Hoewel ik me realiseer dat deze vraag vrij oud is en omdat de geposte links 404'd hebben, had ik onlangs dezelfde fout.

Ik heb het kunnen oplossen door het volgende te doen:

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

Zodra u de verbindingen hebt gewist, kunt u andere query's uitvoeren waar het niet zou zijn gelukt om toegang te krijgen tot de database via rails of een ander opgeslagen proces.

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

--EDIT:

Het is ook vermeldenswaard dat men de ActiveRecord-verbinding niet in een variabele moet opslaan, zoals per leente's post op deze link

"Niet cachen!

Sla een verbinding niet op in een variabele, omdat een andere thread deze mogelijk probeert te gebruiken wanneer deze al weer is ingecheckt in de verbindingspool. Zie: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. Site is gehackt via SQL-injectie

  2. Beheerprogramma's voor SQL Server 2017

  3. PostgreSQL geneste JSON-query's

  4. Rijwaarden samenvoegen T-SQL