Data Access Clauses in Functionsخصائص قراءة البيانات وحدودها
تعلّم الدوال المخزنة والتنفيذ الحتمي DETERMINISTIC في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة
شرح صفوف ومحتوى الفقرة
الصف 1
شرح توضيحي
إلى جانب تحديد الحتمية، يتطلب تعريف الدالة في MySQL 8.4 تحديد علاقتها ببيانات الجداول عبر إحدى العبارات الأربع التالية: NO SQL عندما تخلو الدالة من أي أوامر SQL وتقتصر على الحسابات؛ وCONTAINS SQL عندما تتضمن أوامر لا تقرأ ولا تعدّل جداول البيانات؛ وREADS SQL DATA عندما تنفذ استعلام SELECT ... INTO لقراءة قيم من الجداول؛ وMODIFIES SQL DATA إذا كانت تنفذ تعديلاً داخلياً.
تفرض بنية الدوال المخزنة قيدين جوهريين يجب الانتباه لهما: أولاً، لا يجوز للدالة تنفيذ استعلام SELECT مفتوح يعيد جدول نتائج للعميل (بل يجب دائماً استخدام SELECT ... INTO local_var)؛ ثانياً، يمنع محرك MySQL الدالة من تعديل نفس الجدول الذي يقرأ منه أو يعدله الاستعلام الخارجي المستدعي للدالة لمنع التعارض الدائري (Error 1442).
</>SQL
DELIMITER $$
CREATE FUNCTION fn_customer_spent(p_cust_id INT)
RETURNS DECIMAL(12,2)
NOT DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE v_spent DECIMAL(12,2) DEFAULT 0.00;
SELECT COALESCE(SUM(amount), 0.00) INTO v_spent
FROM orders WHERE customer_id = p_cust_id AND status = 'paid';
RETURN v_spent;
END$$
DELIMITER ;
جميع فقرات هذا الدرس (الدوال المخزنة والتنفيذ الحتمي DETERMINISTIC في MySQL)