क्या MySQL में एक तरीका है डिबगिंग संदेशों को स्टडआउट, प्रलोभन या लॉगफाइल में प्रिंट करना? कुछ इस तरह:
printSQLServer मेंDBMS_OUTPUT.PUT_LINEओरेकल में
जवाबों:
विकल्प 1: इसे अपनी प्रक्रिया में 'टिप्पणी' प्रिंट करने के लिए रखें जब यह चलता है।
SELECT 'Comment';
विकल्प 2: इसे अपनी प्रक्रिया में इसके साथ एक वेरिएबल प्रिंट करने के लिए रखें:
declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);
myvar is 5जब प्रक्रिया चलती है तो यह प्रिंटआउट करता है।
विकल्प 3, एक पाठ स्तंभ के साथ एक तालिका बनाएं tmptable, और इसे संदेशों को धक्का दें:
declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);
आप उपरोक्त को एक संग्रहित प्रक्रिया में रख सकते हैं, इसलिए आपको यह लिखना होगा:
CALL log(concat('the value is', myvar));
जो कुछ कीस्ट्रोक्स को बचाता है।
विकल्प 4, फ़ाइल में लॉग इन करें संदेश
select "penguin" as log into outfile '/tmp/result.txt';
इस आदेश पर बहुत भारी प्रतिबंध हैं। आप केवल डिस्क पर उन क्षेत्रों के लिए संगठन लिख सकते हैं जो 'अन्य' समूह को अनुमति देते हैं और अनुमतियाँ लिखते हैं। इसे / tmp निर्देशिका को सहेजने का काम करना चाहिए।
एक बार जब आप आउटफिट लिखते हैं, तो आप इसे ओवरराइट नहीं कर सकते। यह पटाखे आपके बॉक्स को जड़ने से रोकने के लिए है क्योंकि उन्होंने SQL को आपकी वेबसाइट पर इंजेक्ट किया है और MySQL में मनमाना कमांड चला सकते हैं।
Not allowed to return a result set from a trigger, कोई विचार?
एक वर्कअराउंड केवल किसी अन्य खंड के बिना चयन का उपयोग करना है।
कुछ प्रिंट करने का त्वरित तरीका है:
select '** Place your mesage here' AS '** DEBUG:';
मैं आमतौर पर लॉग इन करने के लिए एक संग्रहीत कार्यविधि के साथ लॉग टेबल बनाता हूं। विकास के तहत प्रक्रिया से जहां भी आवश्यकता हो लॉगिंग प्रक्रिया को कॉल करें।
इसी प्रश्न पर अन्य पोस्टों को देखते हुए , यह एक सामान्य अभ्यास की तरह लगता है, हालांकि कुछ विकल्प हैं।
यह तरीका है कि मैं कैसे डीबग करूंगा:
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SHOW ERRORS; --this is the only one which you need
ROLLBACK;
END;
START TRANSACTION;
--query 1
--query 2
--query 3
COMMIT;
END
यदि क्वेरी 1, 2 या 3 में कोई त्रुटि होगी, तो HANDLER SQLEXCEPTION को पकड़ेगी और SHOW ERRORS हमारे लिए त्रुटियां दिखाएंगे। नोट: शैंड्रर में पहला विवरण होना चाहिए।