2016-07-27 9 views
5

मैं एक रूबी स्क्रिप्ट के साथ एक SQL क्वेरी चलाता हूं जिसमें लगभग 2 घंटे लग सकते हैं।एसबीएल क्वेरी खत्म होने से पहले रूबी स्क्रिप्ट समाप्त

मैं कैसे सुनिश्चित कर सकता हूं कि स्क्रिप्ट क्वेरी समाप्त होने पर ही बाहर निकल जाएगी/समाप्त हो जाएगी, क्योंकि अभी मैं स्क्रिप्ट चलाता हूं, यह क्वेरी को डीबी को पास करता है, और स्क्रिप्ट तुरंत चलती है जबकि क्वेरी अभी भी बंद होती है डीबी पर अधिकांश क्वेरी आवेषण, ड्रॉप टेबल, टेबल बनाने जैसे आदेश हैं।

#!/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(" 
... 
    ") 

मैं खत्म

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

किसी भी विचार है क्योंकि मैं एक ही स्क्रिप्ट है कि जाँच में एक और क्वेरी जोड़ना चाहते क्वेरी समाप्त होने की प्रतीक्षा करने के लिए कैसे, केवल पहले एक के बाद इस क्वेरी चलाना चाहते हैं इसे खत्म करने के बाद पहली क्वेरी।

+0

जिज्ञासा क्या है? –

+0

यह एक बड़ी क्वेरी है, लेकिन क्या यह एसक्यूएल क्वेरी से संबंधित है? क्योंकि क्वेरी काम करती है, मैं बस अपनी स्क्रिप्ट को प्रक्रिया समाप्त होने पर बाहर निकलना चाहता हूं। –

+0

ठीक है, ग्राहक को क्वेरी परिणाम की प्रतीक्षा करनी चाहिए। जब तक इसमें कुछ ऐसा न हो जो ग्राहक को प्रतीक्षा न करे। –

उत्तर

4

official documentation से:

एकाधिक परिणाम सेट

आप एक से अधिक परिणाम सेट प्राप्त कर सकते हैं। इसके लिए काम करने के लिए आपको फ्लैग्स MySQL 2 :: क्लाइंट :: MULTI_STATEMENTS से कनेक्ट करने की आवश्यकता है। एकाधिक परिणाम सेट संग्रहित प्रक्रियाओं के साथ उपयोग किए जा सकते हैं जो एक परिणाम सेट से अधिक लौटाते हैं, और कई SQL कथन को एक क्लाइंट.क्वायरी में कॉल करने के लिए बंडल करते हैं।

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 
संबंधित मुद्दे