حل مشكلات المعاملات في الإجراءات المخزنة في MySQL
عند محاولة تنفيذ المعاملات ضمن إجراء MySQL المخزن، قد يواجه المطورون أخطاء غير متوقعة. سوف تستكشف هذه المقالة بناء الجملة والأخطاء المنطقية التي يمكن أن تمنع التنفيذ الناجح للإجراءات المخزنة للمعاملات.
الحالة: معاملة غير ناجحة
يواجه المطور مشكلة عندما محاولة تنفيذ المعاملات في إجراء مخزن. على الرغم من اتباع وثائق MySQL، فشل تنفيذ الإجراء بنجاح ويؤدي إلى عدم القدرة على حفظ التغييرات. بعد مزيد من الفحص، يبدو أن الكود صحيح من الناحية النحوية.
تحليل الكود
مقتطف الكود المقدم هو كما يلي:البدء أعلن عن poid INT ؛ قم بتعريف معالج الخروج لـ SQLEXCEPTION SQLWARNING يبدأ العودة؛ نهاية بدء المعاملة؛ - إضافة الخيار 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,' '); - إضافة الخيار 12 INSERT INTO Product_option(product_id,option_id,required) VALUES(insertedProductID,12,1); - إضافة الخيار 13 INSERT INTO Product_option(product_id,option_id,required) VALUES(insertedProductID,13,0); يقترف؛ نهاية
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
تحديد الأخطاء
عند الفحص الدقيق، تم تحديد خطأين في بناء الجملة:
فواصل مفقودة في معالج الخروج:
فاصلة منقوطة مفقودة:
الكود المصحح
الرمز المصحح هو كما يلي:ابدأ أعلن عن poid INT ؛ قم بتعريف معالج الخروج لـ SQLEXCEPTION وSQLWARNING يبدأ العودة؛ نهاية؛ بدء المعاملة؛ - إضافة الخيار 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,' '); - إضافة الخيار 12 INSERT INTO Product_option(product_id,option_id,required) VALUES(insertedProductID,12,1); - إضافة الخيار 13 INSERT INTO Product_option(product_id,option_id,required) VALUES(insertedProductID,13,0); يقترف؛ نهاية؛تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3