sql >> Databáze >  >> RDS >> Mysql

Jak volat uloženou proceduru MySQL z Rails?

UPRAVIT:

--

Pomocí ActiveRecord::Base.connections.exec_query() je, pokud mohu říci HODNĚ lepší přístup jen proto, že vrací pole hashů, jak by se dalo očekávat, což ActiveRecord::Base.connections.execute ne.

Dokumentace

--

Přečtěte si úpravu výše, níže nechávám pro referenci.

I když si uvědomuji, že tato otázka je poměrně stará, a protože zveřejněné odkazy mají 404'd, nedávno jsem měl stejnou chybu.

Podařilo se mi to opravit následujícím způsobem:

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

Jakmile vymažete spojení, můžete spouštět jakékoli další dotazy, kde by stejně jako dříve selhal při pokusu o přístup k databázi přes rails nebo jiný uložený proces.

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

--EDIT:

Za zmínku také stojí, že by se nemělo ukládat připojení ActiveRecord do proměnné podle příspěvku leenteho na tomto odkaz

"Neukládejte to do mezipaměti!"

Neukládejte připojení do proměnné, protože se ji může pokusit použít jiné vlákno, když už je zpětně přihlášeno do fondu připojení. Viz: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. získat SOUČET každé osoby podle ID osoby

  2. Vložit více řádků do databáze MySQL z tabulky

  3. Jak zjistit, kdy byla tabulka Oracle naposledy aktualizována

  4. Nasazení vysoce dostupných databází a clusterů pomocí ClusterControl