2008-09-16 10 views
21

मुझे पता है कि mysql के साथ आप एक sql फ़ाइल में SQL कथन लिखने और इस तरह mysql कमांड लाइन से फ़ाइल चला सकते हैं:मैं एक mysql स्क्रिप्ट के एक चर कैसे पारित करते हैं?

mysql> source script.sql 

मैं कैसे स्क्रिप्ट के एक चर पारित करते हैं? उदाहरण के लिए, अगर मैं एक स्क्रिप्ट है कि एक विभाग में सभी कर्मचारियों को पुन: प्राप्त चलाना चाहते हैं, मैं एक चर के रूप में विभाग की संख्या में पारित करने में सक्षम होना चाहता हूँ।

मैं एक खोल स्क्रिप्ट के माध्यम से प्रश्नों को चलाने के लिए कोशिश नहीं कर रहा हूँ। MySQL कमांड लाइन से चलने वाले सरल प्रश्न हैं I मैं उन्हें हर समय पुन: लिखने, और एक खोल स्क्रिप्ट लिख उन्हें overkill होगा के लिए के थक गया हूँ।

उत्तर

17
इस तरह

:

update employee set salary = salary + 10000 where department = @department; 
-5

तुम सच में ऐसा करने का एक और अधिक उचित तरीके पर विचार करना चाहिए:

set @department := 'Engineering'; 

फिर, संदर्भ @department भी आप करने के लिए script.sql की जरूरत है। मुझे लगता है कि आप एक शेल स्क्रिप्ट के माध्यम से mysql क्वेरी चलाने की कोशिश कर रहे हैं। आपको इसके बजाय PERL या PHP जैसे कुछ का उपयोग करना चाहिए।

10
#!/bin/bash 

    #verify the passed params 
    echo 1 cmd arg : $1 
    echo 2 cmd arg : $2 

    export db=$1 
    export tbl=$2 

    #set the params ... Note the quotes (needed for non-numeric values) 
    mysql -uroot -pMySecretPaassword \ 
    -e "set @db='${db}';set @tbl='${tbl}';source run.sql ;" ; 

    #usage: bash run.sh isg_pub_en MetaEntity 
    # 
    #eof file: run.sh 

    --file:run.sql 

    SET @query = CONCAT('Select * FROM ', @db , '.' , @tbl) ; 
    SELECT 'RUNNING THE FOLLOWING query : ' , @query ; 
    PREPARE stmt FROM @query; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 

    --eof file: run.sql 

आप from the following project

से पूरी अवधारणा को फिर से उपयोग कर सकते हैं