شرح صفوف ومحتوى الفقرة
تُستخدم المتغيرات المحلية (Local Variables) لحفظ القيم المرحلية والحسابات المؤقتة أثناء تنفيذ الإجراء المخزن، وتنتهي صلاحيتها تلقائياً بمجرد الوصول إلى نهاية كتلة BEGIN ... END. على عكس متغيرات الجلسة غير المقيدة بنوع (@var)، تُعرَّف المتغيرات المحلية بأمر DECLARE مع تحديد نوع بيانات صارم (مثل DECIMAL(10,2) أو INT) وقيمة ابتدائية اختيارية عبر DEFAULT.
يفرض محرك MySQL 8.4 قاعدة ترتيب صارمة داخل كل كتلة BEGIN ... END: يجب أن تأتي جميع جمل DECLARE الخاصة بالمتغيرات المحلية في بداية الكتلة مباشرةً قبل أي جملة تنفيذية مثل SET أو SELECT أو UPDATE.
SQL
DELIMITER $$
CREATE PROCEDURE sp_order_tax_summary(IN p_order_id INT)
BEGIN
DECLARE v_subtotal DECIMAL(10,2) DEFAULT 0.00;
DECLARE v_tax_rate DECIMAL(4,2) DEFAULT 0.15;
DECLARE v_final DECIMAL(10,2) DEFAULT 0.00;
SELECT amount INTO v_subtotal FROM orders WHERE order_id = p_order_id;
SET v_final = ROUND(v_subtotal * (1 + v_tax_rate), 2);
SELECT p_order_id AS id, v_subtotal AS net, v_final AS gross;
END$$
DELIMITER ;
CALL sp_order_tax_summary(501);