انتقل إلى محتوى الدرس

IN OUT and INOUT Parameters معاملات الإدخال والإخراج و CALL

تعلّم الإجراءات المخزنة والمعاملات وبنى التحكم في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يدعم محرك MySQL 8.4 ثلاثة أوضاع لتمرير المعاملات إلى الإجراء المخزن: الوضع الافتراضي IN يستقبل قيمة من المستدعي للقراءة فقط ولا تنعكس أي تعديلات تجري عليه خارج الإجراء؛ والوضع OUT يبدأ بقيمة NULL داخل الإجراء ويُستخدم لإرجاع نتيجة محسوبة إلى متغير جلسة (مثل @total)؛ أما الوضع INOUT فيجمع الميزتين معاً حيث يستقبل قيمة ابتدائية من متغير الجلسة، يعدّلها داخل الإجراء، ويعيد القيمة المحدَّثة إلى نفس المتغير.

عند استدعاء إجراء يحتوي على معاملات OUT أو INOUT بواسطة CALL، يجب تمرير متغيرات جلسة مسبوقة بالرمز @ لاستلام القيم المخرجة، ثم قراءتها عبر SELECT @var_name.

SQL
DELIMITER $$
CREATE PROCEDURE sp_apply_bonus(
    IN p_id INT, OUT p_name VARCHAR(60), INOUT p_pts INT
)
BEGIN
    SELECT full_name, loyalty_points + p_pts
    INTO p_name, p_pts FROM customers WHERE customer_id = p_id;
END$$
DELIMITER ;
SET @bonus_pts = 150;
CALL sp_apply_bonus(101, @cust_name, @bonus_pts);
SELECT @cust_name AS customer, @bonus_pts AS new_points;