دالة معرفة من قبل المستخدم
الدالة المعرفة من قبل المستخدم ( UDF ) هي دالة يوفرها مستخدم البرنامج أو البيئة، في سياق يفترض فيه عادةً أن الدوال مضمنة في البرنامج أو البيئة. وعادةً ما تُكتب الدوال المعرفة من قبل المستخدم لتلبية متطلبات مُنشئها.
لغة أساسية
في بعض الإصدارات القديمة من لغة البرمجة BASIC ، تُعرَّف الدوال المُعرَّفة من قِبل المستخدم باستخدام صيغة "DEF FN". أما اللهجات الحديثة من BASIC فتتأثر بنموذج البرمجة الهيكلية ، حيث يُكتب معظم أو كل الكود كدوال أو إجراءات مُعرَّفة من قِبل المستخدم، ويصبح هذا المفهوم غير ضروري عمليًا.
لغة كوبول
في لغة برمجة كوبول ، الدالة المعرفة من قبل المستخدم هي كيان يُعرّفه المستخدم بتحديد فقرة FUNCTION-ID. يجب أن تُرجع الدالة المعرفة من قبل المستخدم قيمةً بتحديد عبارة RETURNING في رأس قسم الإجراء، ويتم استدعاؤها باستخدام صيغة مُعرّف الدالة. راجع معيار لغة برمجة كوبول ISO/IEC 1989:2014 لمزيد من التفاصيل.
اعتبارًا من مايو 2022، يحتوي برنامج IBM Enterprise COBOL لنظام التشغيل z/OS 6.4 ( IBM COBOL ) على دعم للوظائف المعرفة من قبل المستخدم.
قواعد البيانات
في أنظمة إدارة قواعد البيانات العلائقية ، توفر الدالة المعرفة من قبل المستخدم آلية لتوسيع وظائف خادم قاعدة البيانات بإضافة دالة يمكن تقييمها باستخدام عبارات لغة الاستعلام القياسية (عادةً SQL ). يميز معيار SQL بين الدوال العددية ودوال الجداول. تُرجع الدالة العددية قيمة واحدة فقط (أو NULL )، بينما تُرجع دالة الجداول جدولًا (علائقيًا) يتكون من صفر أو أكثر من الصفوف، ويحتوي كل صف على عمود واحد أو أكثر.
تُعرَّف الدوال المُعرَّفة من قِبل المستخدم في لغة SQL باستخدام CREATE FUNCTIONعبارة `. على سبيل المثال، يمكن تعريف دالة مُعرَّفة من قِبل المستخدم لتحويل درجة الحرارة من مئوية إلى فهرنهايت (مقياس درجة الحرارة المستخدم في الولايات المتحدة الأمريكية) على النحو التالي:
إنشاء دالة dbo.CtoF ( Celsius FLOAT ) تُرجع قيمة من نوع FLOAT ، وتُرجع ( Celsius * 1.8 ) + 32بمجرد إنشاء دالة معرفة من قبل المستخدم، يمكن استخدامها في التعبيرات ضمن عبارات SQL. على سبيل المثال، يمكن استدعاؤها في المواضع التي يُسمح فيها باستخدام معظم الدوال المضمنة الأخرى. يشمل ذلك أيضًا عبارات SELECT ، حيث يمكن استخدام الدالة مع البيانات المخزنة في جداول قاعدة البيانات. من الناحية النظرية، يتم تقييم الدالة مرة واحدة لكل صف في هذا الاستخدام. على سبيل المثال، لنفترض وجود جدول باسم ElementsBoilingPoint، يحتوي على صف لكل عنصر كيميائي معروف. يحتوي الجدول على عمود باسم BoilingPoint يمثل درجة غليان ذلك العنصر، بالدرجة المئوية. الاستعلام
حدد الاسم ، ودرجة الغليان ( CtoF ) من جدول العناصرسيستخرج هذا الأمر اسم المنتج ودرجة غليانه من كل صف. ثم يستدعي CtoFالدالة المُعرَّفة من قِبل المستخدم والمُعلنة أعلاه لتحويل القيمة في العمود إلى قيمة بالفهرنهايت.
لكل دالة معرفة من قبل المستخدم خصائص أو سمات معينة. يحدد معيار SQL الخصائص التالية:
- اللغة - تحدد لغة البرمجة التي يتم بها تنفيذ الوظيفة المعرفة من قبل المستخدم؛ وتشمل الأمثلة SQL و C و C# و Java.
- نمط المعلمات - يحدد الاصطلاحات المستخدمة لتمرير معلمات الدالة ونتائجها بين تنفيذ الدالة ونظام قاعدة البيانات (ينطبق فقط إذا لم تكن اللغة SQL).
- الاسم المحدد - اسم فريد للدالة ضمن قاعدة البيانات. تجدر الإشارة إلى أن اسم الدالة ليس بالضرورة أن يكون فريدًا، نظرًا لوجود الدوال المُحمّلة . تتطلب بعض تطبيقات SQL أن تكون أسماء الدوال فريدة ضمن قاعدة البيانات، ولا يُسمح باستخدام الدوال المُحمّلة.
- الحتمية - تحدد ما إذا كانت الدالة حتمية أم لا. تؤثر خاصية الحتمية على مُحسِّن الاستعلام عند تجميع عبارة SQL.
- الوصول إلى بيانات SQL - يخبر نظام إدارة قواعد البيانات ما إذا كانت الوظيفة لا تحتوي على عبارات SQL (لا SQL)، أو تحتوي على عبارات SQL ولكنها لا تصل إلى أي جداول أو طرق عرض (تحتوي على SQL)، أو تقرأ البيانات من الجداول أو طرق العرض (تقرأ بيانات SQL)، أو تقوم فعليًا بتعديل البيانات في قاعدة البيانات (تعدل بيانات SQL).
يجب عدم الخلط بين الدوال المعرفة من قبل المستخدم والإجراءات المخزنة . تسمح الإجراءات المخزنة للمستخدم بتجميع مجموعة من أوامر SQL. يمكن للإجراء قبول معلمات وتنفيذ عبارات SQL الخاصة به بناءً على تلك المعلمات. الإجراء ليس تعبيرًا، وبالتالي لا يمكن استخدامه مثل الدوال المعرفة من قبل المستخدم.
تتيح بعض أنظمة إدارة قواعد البيانات إنشاء دوال مُعرَّفة من قِبل المستخدم بلغات برمجة أخرى غير SQL. على سبيل المثال، يسمح Microsoft SQL Server للمستخدم باستخدام لغات .NET، بما في ذلك C#، لهذا الغرض. بينما يدعم كل من DB2 وOracle الدوال المُعرَّفة من قِبل المستخدم المكتوبة بلغات برمجة C أو Java.
SQL Server 2000
يوجد ثلاثة أنواع من الدوال المعرفة من قبل المستخدم في Microsoft SQL Server 2000: الدوال العددية ، والدوال الجدولية المضمنة، والدوال الجدولية متعددة العبارات.
تُعيد الدوال العددية قيمة بيانات واحدة (وليست جدولًا) باستخدام عبارة RETURNS. يمكن للدوال العددية استخدام جميع أنواع البيانات العددية، باستثناء الطابع الزمني وأنواع البيانات المُعرَّفة من قِبل المستخدم. تُعيد الدوال الجدولية المضمنة مجموعة نتائج عبارة SELECT واحدة. أما الدوال الجدولية متعددة العبارات فتُعيد جدولًا تم إنشاؤه باستخدام العديد من عبارات TRANSACT-SQL .
يمكن استدعاء الدوال المعرفة من قبل المستخدم من خلال استعلام مثل الدوال المضمنة مثل OBJECT_ID و LEN و DATEDIFF، أو يمكن تنفيذها من خلال عبارة EXECUTE مثل الإجراءات المخزنة.
ملاحظات الأداء:
- في نظام Microsoft SQL Server 2000، قد تكون الدالة التي تُغلّف عرضًا (View) أسرع بكثير من العرض نفسه. الدالة التالية (MyFunction) مثال على دالة مُغلّفة تعمل أسرع من العرض الأساسي (MyView):
إنشاء دالة MyFunction () تُرجع جدولًا @Tbl يحتوي على الأعمدة التالية : StudentID ( نص ، 255 )، SAS_StudentInstancesID (عدد صحيح ) ، Label ( نص ، 255 )، Value ( مال ) ، CMN_PersonsID (عدد صحيح ) . ثم تُدرج هذه الأعمدة في الجدول @Tbl ، حيث يتم تحديدها من خلال الاستعلام التالي : SELECT StudentID , SAS_StudentInstancesID , Label , Value , CMN_PersonsID FROM MyView -- حيث يقوم MyView بتحديد نفس الأعمدة من جدول (جداول) كبير (باستخدام عمليات الربط).نهاية العودة
- في Microsoft SQL Server 2005 تكون نتيجة تنفيذ نفس التعليمات البرمجية هي العكس: يتم تنفيذ العرض بشكل أسرع من "غلاف الوظيفة".
الدوال المعرفة من قبل المستخدم هي إجراءات فرعية تتكون من جملة واحدة أو أكثر من جمل Transact-SQL، ويمكن استخدامها لتغليف التعليمات البرمجية لإعادة استخدامها. تأخذ هذه الدوال صفرًا أو أكثر من الوسائط، وتُقيّم قيمة مُعادة. تحتوي على جمل تحكم في التدفق وجمل DML في جسمها، على غرار الإجراءات المخزنة. لا تسمح بإجراء تغييرات على أي حالة جلسة عامة، مثل تعديلات على قاعدة البيانات أو الموارد الخارجية، كملف أو شبكة. لا تدعم معلمات الإخراج. يجب تحديد الكلمة المفتاحية DEFAULT لتمرير القيمة الافتراضية للمعلمة. تؤدي الأخطاء في الدوال المعرفة من قبل المستخدم إلى إيقافها، مما يؤدي بدوره إلى إيقاف الجملة التي استدعتها.
إنشاء دالة CubicVolume -- أبعاد الإدخال بالسنتيمتر ( @CubeLength decimal ( 4 , 1 ), @CubeWidth decimal ( 4 , 1 ), @CubeHeight decimal ( 4 , 1 ) ) تُرجع decimal ( 12 , 3 ) AS BEGIN RETURN ( @CubeLength * @CubeWidth * @CubeHeight ) ENDأباتشي هايف
يُعرّف Apache Hive ، بالإضافة إلى الدوال المُعرّفة من قِبل المستخدم (UDF) العادية، دوال التجميع المُعرّفة من قِبل المستخدم (UDAF) ودوال إنشاء الجداول (UDTF). [ 1 ] يُمكّن Hive المطورين من إنشاء دوال مخصصة خاصة بهم باستخدام Java. [ 2 ]
أباتشي دوريس
تتيح قاعدة بيانات أباتشي دوريس، وهي قاعدة بيانات تحليلية مفتوحة المصدر تعمل في الوقت الفعلي، للمستخدمين الخارجيين المساهمة بوظائفهم المعرفة من قبل المستخدم والمكتوبة بلغة C++. [ 3 ]
مراجع
- ↑ "LanguageManual UDF - Apache Hive - Apache Software Foundation" . 26 يونيو 2015.
- ↑ "HivePlugins - Apache Hive - Apache Software Foundation" . 26 يونيو 2015.
- ↑ "Apache Doris UDF" . مؤرشف من الأصل في 10 أبريل 2023. تم الاطلاع عليه في 8 أبريل 2023 .
روابط خارجية
- قواعد البيانات
- SQL
- البرامج الفرعية
