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

Custom Statement DELIMITER Syntax تغيير فاصل الأوامر DELIMITER

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

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

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

عند كتابة إجراء مخزن يحتوي على عدة عبارات SQL داخل كتلة BEGIN ... END، تنتهي كل عبارة داخلية بفاصلة منقوطة ;. في الوضع الافتراضي، يفسر عميل سطر الأوامر (MySQL Client) أول فاصلة منقوطة يصادفها على أنها نهاية أمر CREATE PROCEDURE بأكمله، فيرسل نصف الكود إلى الخادم مما يتسبب فوراً في خطأ نحوي (Syntax Error 1064).

لحل هذه المشكلة، نستخدم الأمر DELIMITER $$ (أو DELIMITER //) قبل تعريف الإجراء لتغيير رمز إنهاء الأمر الخارجي مؤقتاً إلى $$. بذلك يمرر العميل جميع الفواصل المنقوطة الداخلية كما هي ضمن نص الإجراء، وعندما يصل إلى END$$ يرسل الإجراء كاملاً للخادم، ثم نعيد الفاصل إلى وضعه الطبيعي بكتابة DELIMITER ;.

SQL
DELIMITER $$
CREATE PROCEDURE sp_archive_summary(IN p_min_points INT)
BEGIN
    UPDATE customers SET tier = 'Gold'
    WHERE loyalty_points >= p_min_points;
    SELECT COUNT(customer_id) AS gold_members
    FROM customers WHERE tier = 'Gold';
END$$
DELIMITER ;

CALL sp_archive_summary(500);

محاكي الإجراءات المخزنة التفاعلي