2011-11-16 15 views
28

हम एक सरल एसक्यूएल स्क्रिप्ट जो एक MySQL डेटाबेस के खिलाफ निष्पादित करने की आवश्यकता है निष्पादित करते समय और हम स्क्रिप्ट की प्रगति पर प्रिंट लॉग बयान चाहते हैं (उदाहरण के लिए सम्मिलित किए 10 foo या नष्ट में रिकॉर्ड बार से 5 रिकॉर्ड)। हम इसे कैसे करते हैं?कैसे प्रिंट बयान प्रतिध्वनित करने के लिए एक एसक्यूएल स्क्रिप्ट

  1. मैं सम्मिलित/अद्यतन/हटाए गए कथन के लिए उपयोग किए जाने वाले वाक्यविन्यास को जानना चाहता हूं।
  2. मैं अपने कथन (नों) से प्रभावित पंक्तियों की संख्या के बारे में कैसे पता चलेगा।
  3. मैं भी उन्हें मुद्रण स्क्रिप्ट के शीर्ष पर बंद या आदेश पर एक ECHO का उपयोग कर नियंत्रित करने के लिए करना चाहते हैं।
  4. स्क्रिप्ट विंडोज़/लिनक्स ओएस भर में पोर्टेबल होना चाहिए।

उत्तर

32

इस दे देंगे आप एक एसक्यूएल स्क्रिप्ट के भीतर साधारण प्रिंट कर रहे हैं:

select 'This is a comment' AS ''; 

वैकल्पिक रूप से, update, delete, या insert कमांड के बाद सीधे उपयोग किए जाने पर यह आपके स्थिति अपडेट में कुछ गतिशील डेटा जोड़ देगा:

select concat ("Updated ", row_count(), " rows") as ''; 
+0

डालने, अद्यतन के लिए वाक्य रचना ही है से चलाया जा सकता है उल्लेख करना चाहिए? – Joe

+0

मैं इसका उपयोग कर रहा हूं। यह बढ़िया काम करता है। – cherouvim

+0

यदि मुझे किसी निश्चित अपडेट/डालने/हटाए गए कथन से प्रभावित पंक्तियों की संख्या कैप्चर करना है तो मुझे क्या करना चाहिए। – Joe

1

आप प्रिंट -p उपयोग कर सकते हैं - लिपि में इस उदाहरण करना है:

#!/bin/ksh 
mysql -u username -ppassword -D dbname -ss -n -q |& 
print -p -- "select count(*) from some_table;" 
read -p get_row_count1 
print -p -- "select count(*) from some_other_table;" 
read -p get_row_count2 
print -p exit ; 
# 
echo $get_row_count1 
echo $get_row_count2 
# 
exit 
+3

मुझे संदेह है कि कई लोगों के पास 'ksh' स्थापित है। – Blender

+0

मैं भी है कि इस स्क्रिप्ट, आदेशों को हटाना एक विंडोज या लिनक्स वातावरण – Joe

5

बस अपनी स्क्रिप्ट अधिक पठनीय बनाने के लिए, हो सकता है इस proc का उपयोग करें:

DELIMITER ;; 

DROP PROCEDURE IF EXISTS printf; 
CREATE PROCEDURE printf(thetext TEXT) 
BEGIN 

    select thetext as ``; 

END; 

;; 

DELIMITER ; 

अब आप कर सकते हैं:

call printf('Counting products that have missing short description'); 
14

मैं नहीं जानता कि अगर यह मदद करता है:

mysql < test.sql 
:

आप कमांड लाइन से एक एसक्यूएल स्क्रिप्ट (test.sql) चलाना चाहते हैं लगता है

SELECT * FROM information_schema.SCHEMATA; 
\! echo "I like to party..."; 

सांत्वना की तरह कुछ दिखाएगा::

CATALOG_NAME SCHEMA_NAME   DEFAULT_CHARACTER_SET_NAME  
     def information_schema  utf8 
     def mysql     utf8 
     def performance_schema  utf8 
     def sys     utf8 
I like to party... 
तो

तुम सिर्फ का उपयोग करके एक एसक्यूएल बयान के अंदर टर्मिनल आदेश पर अमल कर सकते हैं, प्रदान

और test.sql की सामग्री को कुछ की तरह है स्क्रिप्ट एक कमांड लाइन के माध्यम से चलाया जाता है।

\! #terminal_commands 
संबंधित मुद्दे