"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मेरी MySQL संग्रहित प्रक्रियाएँ लेनदेन को सफलतापूर्वक निष्पादित करने में विफल क्यों होती हैं?

मेरी MySQL संग्रहित प्रक्रियाएँ लेनदेन को सफलतापूर्वक निष्पादित करने में विफल क्यों होती हैं?

2024-11-18 को प्रकाशित
ब्राउज़ करें:542

Why Do My MySQL Stored Procedures Fail to Execute Transactions Successfully?

MySQL संग्रहीत प्रक्रियाओं में लेनदेन संबंधी समस्याओं को हल करना

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

कोड का विश्लेषण

प्रदान किया गया कोड स्निपेट इस प्रकार है:

BEGIN घोषणापत्र INT; SQLException SQLWarning के लिए निकास हैंडलर घोषित करें शुरू रोलबैक; अंत लेनदेन प्रारंभ करें; --विकल्प 5 जोड़ें product_option(product_id,option_id,आवश्यक) मानों में डालें(insertedProductID,5,0); SET poid = (SELECT LAST_INSERT_ID()); उत्पाद_विकल्प_मान में डालें (उत्पाद_विकल्प_आईडी, उत्पाद_आईडी, विकल्प_आईडी, विकल्प_मान_आईडी, मात्रा, घटाना, कीमत, मूल्य_उपसर्ग, अंक, अंक_उपसर्ग, वजन, वजन_उपसर्ग) मान (पोइड, सम्मिलित उत्पाद आईडी, 5,50,0,0,4.99,' ',0,' ',0,' '); --विकल्प 12 जोड़ें product_option(product_id,option_id,आवश्यक) मानों में डालें(insertedProductID,12,1); --विकल्प 13 जोड़ें product_option(product_id,option_id,आवश्यक) मानों में डालें(insertedProductID,13,0); प्रतिबद्ध; END

त्रुटियों की पहचान करना

BEGIN

DECLARE poid INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING
BEGIN
    ROLLBACK;
END

START TRANSACTION;

    -- ADD option 5
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
    SET poid = (SELECT LAST_INSERT_ID());
    INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,' ',0,' ',0,' ');

    -- ADD option 12
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);

    -- ADD option 13
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);

COMMIT;

END

में अल्पविराम का अभाव निकास हैंडलर:

  1. निकास हैंडलर घोषणा में, शर्तों को अलग करने के लिए अल्पविराम होना चाहिए। एक समापन अर्धविराम।

    • सही किया गया कोड
  2. सही किया गया कोड इस प्रकार है:
  3. BEGIN घोषणापत्र INT; SQLException, SQLWARNING के लिए निकास हैंडलर घोषित करें शुरू रोलबैक; अंत; लेनदेन प्रारंभ करें; --विकल्प 5 जोड़ें product_option(product_id,option_id,आवश्यक) मानों में डालें(insertedProductID,5,0); SET poid = (SELECT LAST_INSERT_ID()); उत्पाद_विकल्प_मान में डालें (उत्पाद_विकल्प_आईडी, उत्पाद_आईडी, विकल्प_आईडी, विकल्प_मान_आईडी, मात्रा, घटाना, कीमत, मूल्य_उपसर्ग, अंक, अंक_उपसर्ग, वजन, वजन_उपसर्ग) मान (पोइड, सम्मिलित उत्पाद आईडी, 5,50,0,0,4.99,' ',0,' ',0,' '); --विकल्प 12 जोड़ें product_option(product_id,option_id,आवश्यक) मानों में डालें(insertedProductID,12,1); --विकल्प 13 जोड़ें product_option(product_id,option_id,आवश्यक) मानों में डालें(insertedProductID,13,0); प्रतिबद्ध; अंत;

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3