2009-11-30 7 views
10

में वर्तमान डेटाबेस सेट करें मेरे पास MySQL के लिए एक स्क्रिप्ट फ़ाइल है जिसे लगभग 30 डेटाबेस पर चलाने की आवश्यकता है।MySQL स्क्रिप्ट

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `availability` ... 

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `reliability` INTEGER ... 

इस स्क्रिप्ट में कई और अधिक लाइनों रहे हैं और मैं वर्तमान डेटाबेस के एक पाश में यह स्वचालित करने के लिए अद्यतन किया जा करना चाहते हैं: यहाँ एक टुकड़ा है। मुझे कर्सर का उपयोग करके सूची और लूप नीचे मिल गया है, लेकिन यहां मैं परेशानी में भाग रहा हूं:

जब मैं कर्सर में किसी विशेष डेटाबेस पर हूं, तो डेटाबेस नाम एक चर में है। मैं सिर्फ वैकल्पिक टेबल कर्केमा नहीं कह सकता। tblusers क्योंकि स्क्रिप्ट शिकायत करती है कि कर्सरमा नामक कोई डेटाबेस नहीं है (वेरिएबल का नाम जिसमें डेटाबेस नाम है जिसे मैं चालू करना चाहता हूं)।

SET @curschema = curschema; 
SET @query = NULL; 
SET @email = emailAddress; 
SET @pass = pass; 
SET @statement = CONCAT('SELECT userid INTO @query FROM ', @curschema, '.tbluser 
PREPARE stmt FROM @statement; 
EXECUTE stmt; 

समस्या है, (ऊपर) की तरह निष्पादन तार की स्थापना कोड की लाइनों के दर्जनों के साथ एक बहुत ही थकाऊ काम हो जाएगा: मैं बनाने और एक बयान पैरामीटर का उपयोग कर क्रियान्वित करते हुए इस पर काम कर लिया है मुझे दौड़ना है। मुझे उम्मीद थी एक तरीका है कि मैं संचालन के लिए वर्तमान डेटाबेस तैयार कर सकते हैं और उसके बाद सिर्फ इतना है कि डेटाबेस प्रत्येक पाश रीसेट पारित किया कि तो मेरे सामान्य बयान चलाया जा सकता है:

(मेरे पाश की शुरुआत)

सेट डाटाबेस database0 - (database29 के माध्यम से)

- database0 साथ रन बयान .... 29 उपरोक्त आदेश

ALTER TABLE `tblusers` ADD COLUMN `availability` TINYINT(1) UNSIGNED ... 

ALTER TABLE `tblusers` ADD COLUMN `reliability` INTEGER UNSIGNED NOT ... 

(मेरी पाश के अंत)

साथ गर्भित किया जा रहा

क्या ऐसा आदेश मौजूदा डेटाबेस को सेट करने के लिए मौजूद है जिस पर संचालन किया जा सकता है? यदि ऐसा कोई आदेश मौजूद नहीं है, तो क्या मेरा कार्य पूरा करने का कोई आसान तरीका है? मुझे लगता है कि इस समय इस निष्पादन योग्य/पैरामीटर-आकार वाले तारों के लिए मेरी संपूर्ण स्क्रिप्ट फ़ाइल को फिर से लिखना है, इसके अलावा सभी डेटाबेस नामों पर एक खोज/प्रतिस्थापन करना आसान है।

धन्यवाद!

उत्तर

28

क्या आपने USE को आजमाया था?

USE db_name 

उपयोग db_name बयान MySQL बताता बाद बयान के लिए डिफ़ॉल्ट (वर्तमान) डेटाबेस रूप db_name डेटाबेस का उपयोग करने। डेटाबेस सत्र के अंत तक डिफ़ॉल्ट रहता है या अन्य उपयोग कथन जारी किया जाता है।

उदाहरण:

USE db1; 
SELECT COUNT(*) FROM mytable; # selects from db1.mytable 
USE db2; 
SELECT COUNT(*) FROM mytable; # selects from db2.mytable 
+0

की कोशिश की है कि नहीं किया है, लेकिन यहाँ मेरी त्वरित परीक्षण से ऐसा लगता है कि यह एक का इलाज काम करता लग रहा है! धन्यवाद! मैं ऑनलाइन और MySQL दस्तावेज़ीकरण के माध्यम से देख रहा था और कुछ भी निश्चित नहीं मिला। – afilbert

+0

दोह! अब मैं इसे MySQL दस्तावेज़ में ढूंढता हूं। मुझे लगता है कि कभी-कभी आपको यह जानना होगा कि सही खोज क्वेरी कैसे पूछें। एक बार फिर धन्यवाद! – afilbert

+0

ज़रूर! कोई बात नहीं। –