تعد قواعد البيانات العلائقية من أكثر أنظمة قواعد البيانات شيوعًا وقوة في العالم الحديث. أحد الأشياء التي تشترك فيها جميع قواعد البيانات العلائقية هو استخدام SQL.
لغة الاستعلام القياسية أو SQL، كما نعرفها، هي لغة قوية ومرنة للتفاعل وإدارة ومعالجة البيانات المخزنة في قاعدة بيانات علائقية.
هناك ميزة واحدة قوية في SQL تسمح لنا بتعريف الوظيفة المخصصة والتي تُعرف أيضًا بوظائف SQL. تتيح لنا الوظيفة المخصصة في SQL أداء مهمة معينة داخل قاعدة البيانات. يمكن للوظيفة إجراء مجموعة متنوعة من العمليات بدءًا من الاستعلام عن البيانات من قاعدة البيانات وحتى معالجة البيانات الموجودة.
في هذا الدليل، سوف نتعلم كيفية العمل مع عبارة CREATE FUNCTION في SQL لمعرفة كيف يمكننا إنشاء وظائف مخصصة.
متطلبات:
قبل أن نبدأ، تأكد من استيفاء المتطلبات التالية:
- متغير SQL (MySQL، وPostgreSQL، وSQLite، وما إلى ذلك)
- أذونات لإنشاء وظائف في خادم قاعدة البيانات الهدف
مع استيفاء المتطلبات المحددة، يمكننا المضي قدمًا.
وظائف SQL
تشبه وظائف SQL إلى حد كبير وظيفة نموذجية في لغات البرمجة الأخرى. إنها ببساطة طريقة لإنشاء كتل تعليمات برمجية قابلة لإعادة الاستخدام يمكنها قبول المعلمات وتنفيذ مهمة محددة وإرجاع قيمة أو نتيجة.
يمكننا تجميع وظائف SQL في فئتين رئيسيتين:
- الوظائف العددية - تقوم الوظائف العددية بإرجاع قيمة واحدة بناءً على معلمات الإدخال. الاستخدام الشائع للوظائف العددية هو حساب القيم أو تحويلات البيانات.
- وظائف القيمة الجدولية - من ناحية أخرى، تقوم TFVs بإرجاع جدول كمخرجات. الاستخدام الشائع لـ TVDs هو عند التعامل مع استعلامات معقدة للغاية. إذا كنت بحاجة إلى دالة يمكنها إرجاع مجموعة من السجلات، فإن الدوال ذات القيمة الجدولية هي أداة جيدة.
إنشاء بيان دالة في SQL
في SQL، نستخدم عبارة CREATE FUNCTION لإنشاء وظيفة محددة من قبل المستخدم في SQL. يوضح ما يلي بناء جملة عبارة CREATE FUNCTION في SQL:
إنشاء وظيفة func_name ( [ pa1 نوع البيانات، نوع البيانات الاسمية، ... ] )
إرجاع rt_data_type
يبدأ
-- وظيفة جسم
نهاية؛
نبدأ بالكلمة الأساسية CREATE FUNCTION للإشارة إلى أننا نرغب في إنشاء وظيفة مخصصة جديدة. نضمن أيضًا تمرير اسم الوظيفة.
بعد ذلك، نقوم بتوفير معلمات إدخال الدالة داخل زوج من الأقواس. يمكن أن تحتوي الدالة على صفر أو أكثر من المعلمات.
لتحديد معلمة، نبدأ باسم المعلمة ونوع بيانات الوظيفة التي يجب أن تقبلها الوظيفة.
ننتقل بعد ذلك إلى تعيين القيمة المرجعة للوظيفة. نقوم بذلك عن طريق تحديد نوع البيانات الذي يجب أن ترجعه الوظيفة. على سبيل المثال، إذا قامت الدالة بإرجاع رقم، فيمكنك تحديد قيمة إرجاع مناسبة مثل INT.
بعد ذلك، نستخدم الكلمة الأساسية BEGIN للإشارة إلى بداية نص الوظيفة. في الجسم الوظيفي، نقوم بتوفير جميع المهام التي يجب أن تؤديها الوظيفة.
وأخيرًا، نقوم بإغلاق نص الوظيفة باستخدام الكلمة الأساسية END.
مثال 1:
دعونا نلقي نظرة على مثال عملي يوضح كيفية استخدام عبارة CREATE FUNCTION لتعريف دالة SQL جديدة.
لنفترض أن لدينا دالة تحدد لوغاريتم رقم إدخال معين. في SQL، يمكننا تعريف الدالة على النحو التالي:
محدد $$إنشاء وظيفة count_logarithm ( قيمة الإدخال العائمة )
عوائد تعويم
حتمية
يبدأ
إذا كانت قيمة الإدخال فارغة أو قيمة الإدخال < = 0 ثم
إشارة SQLSTATE '45000'
تعيين MESSAGE_TEXT = '[خطأ]: إدخال غير صالح.' ;
إنهاء إذا؛
العودة LN ( قيمة المدخلات ) ;
نهاية $ $
محدد ;
في هذا المثال، نبدأ بتغيير المحدد المستخدم في استعلامات SQL بشكل مؤقت. هذه مهمة شائعة في MySQL للمساعدة في التمييز بين عبارات SQL داخل الوظيفة وتعريفات الوظيفة.
بعد ذلك، نقوم بإنشاء دالة تحسب اللوغاريتم الطبيعي لقيمة إدخال معينة. تقوم الدالة بإرجاع تعويم.
ملاحظة: لاحظ استخدام الكلمة الأساسية DETERMINISTIC التي تشير إلى أن الدالة ستعيد نفس النتيجة لنفس الإدخال. يلعب هذا دورًا حاسمًا في تحسين الاستعلام.
في نص الدالة، نتحقق مما إذا كان الإدخال قيمة موجبة ونعيد خطأ إذا كان خطأ. وبخلاف ذلك، فإننا نحسب لوغاريتم القيمة ونعيد الناتج.
وأخيرًا، نستخدم END$$ للإشارة إلى نهاية منطق الوظيفة.
ملاحظة: نستخدم أيضًا عبارة DELIMITER لإعادة تعيين المحدد إلى الوضع الافتراضي.
بعد أن قمنا بتعريف الدالة، يمكننا استدعاء الدالة على النحو التالي:
SELECT calculate_logarithm ( 100 ) ;
يجب أن يستدعي هذا الوظيفة ذات الإدخال المحدد ويعيد قيمة اللوغاريتم المقابل أو الخطأ إذا كان الإدخال غير صالح.
مثال 2:
يمكننا أيضًا إنشاء TVF الذي يُرجع جدولًا كما هو موضح في المثال التالي:
إنشاء وظيفة FetchDatabases ( c_id VARCHAR )جدول المرتجعات (
db_id إنت،
db_name VARCHAR ( 255 )
)
يبدأ
يعود (
حدد db_id، db_name
من قواعد البيانات
أين class_id = c_id
) ;
نهاية؛
يختار * من جلب قواعد البيانات ( 'وثيقة' ) ;
في هذا الكود، تقوم الدالة بإرجاع كافة السجلات حيث تكون فئة قاعدة البيانات مساوية لـ 'المستند'. يؤدي ذلك إلى إرجاع جميع السجلات المطابقة من جدول قواعد البيانات كجدول يحتوي على عمودين 'db_id' و'db_name'.
خاتمة
في هذا البرنامج التعليمي، تعلمنا طريقة عمل عبارة CREATE FUNCTION في SQL والتي تسمح لنا بإنشاء منطق مغلف مخصص يمكننا إعادة استخدامه عبر قاعدة البيانات.