شرح صفوف ومحتوى الفقرة
توصَف الدالة المخزنة بأنها حتمية التنفيذ (DETERMINISTIC) إذا كانت تُنتج دائماً نفس النتيجة تماماً عند تزويدها بنفس قيم المدخلات، بغض النظر عن وقت التشغيل أو حالة الخادم (مثل معادلة حساب الضريبة أو تنسيق رمز العملة). أما إذا كانت نتيجة الدالة تتغير بتغير الوقت أو تعتمد على قيم متغيرة أو قراءة بيانات تتبدل باستمرار، فتوصَف بأنها غير حتمية (NOT DETERMINISTIC).
في محرك MySQL 8.4 يكون السجل الثنائي (Binary Logging) مفعّلاً افتراضياً لأغراض النسخ المتماثل (Replication) والاستعادة الزمنية. لذلك يرفض الخادم إنشاء أي دالة مخزنة لا تصرّح صراحةً بخصائصها (مثل DETERMINISTIC أو READS SQL DATA أو NO SQL) ويعيد الخطأ الشهير Error 1418 لضمان تطابق البيانات بين الخادم الرئيسي والخوادم التابعة.
SQL
DELIMITER $$
CREATE FUNCTION fn_shipping_band(p_weight_kg DECIMAL(6,2))
RETURNS VARCHAR(20)
DETERMINISTIC
NO SQL
BEGIN
DECLARE v_band VARCHAR(20) DEFAULT 'Standard';
IF p_weight_kg > 20.00 THEN SET v_band = 'Heavy Freight';
ELSEIF p_weight_kg > 5.00 THEN SET v_band = 'Express Parcel';
END IF;
RETURN v_band;
END$$