2016-07-27 10 views
5

Uruchamiam kwerendę SQL za pomocą skryptu ruby, który powinien zająć około 2 godzin.Koniec skryptu ruby ​​przed zakończeniem zapytania sql

W jaki sposób mogę się upewnić, że skrypt zakończy/zakończy działanie dopiero po zakończeniu procesu zapytania, ponieważ w tej chwili uruchomiłem skrypt, przekazuje zapytanie do bazy danych, a skrypt natychmiast zamyka się, gdy zapytanie wciąż działa w DB. Większość zapytania to komendy, takie jak wstawki, tabele upuszczania, tworzenie tabel.

#!/usr/bin/env ruby 

require 'mysql2' 
client = Mysql2::Client.new(:host => ENV_YML['host'], :username => ENV_YML['username'], :password => ENV_YML['password'], :database => ENV_YML['dbtemp'], :flags => Mysql2::Client::MULTI_STATEMENTS) 


client.query(" 
... 
    ") 

chcę uruchomić tej kwerendy tylko po pierwszym zakończyć

client.query("SELECT ;").each do |row| 
.... 
end 

Każdy pomysł jak czekać na zapytanie do końca, ponieważ chcę, aby dodać kolejne zapytanie w tym samym skrypcie sprawdzenia pierwsze zapytanie po zakończeniu.

+0

Jakie jest zapytanie? –

+0

to duże zapytanie, ale czy jest ono powiązane z zapytaniem sql? ponieważ zapytanie działa, chcę tylko, aby mój skrypt zakończył działanie po zakończeniu procesu. –

+0

Cóż, klient powinien czekać na wynik zapytania. Chyba że jest w tym coś, co sprawia, że ​​klient nie czeka. –

Odpowiedz

4

Z official documentation:

Multiple wynik ustawia

Można również pobrać wiele zestawów wyników. Aby to zadziałało, potrzebujesz do połączenia z flagami Mysql2 :: Client :: MULTI_STATEMENTS. Wiele zestawów wyników można używać z procedurami przechowywanymi, które zwracają więcej niż jeden zestaw wyników, a także dla dołączenia kilku instrukcji SQL do pojedynczego wywołania do klienta.query.

client = Mysql2::Client.new(:host => "localhost", :username => "root", :flags => Mysql2::Client::MULTI_STATEMENTS) 

result = client.query('...') 

while client.next_result 
    result = client.store_result 
    # result now contains the next result set 
end 
Powiązane problemy