You are on page 1of 3

‫الدوال المخزنة ‪Stored Functions‬‬

‫‪ .1‬تعرٌـــف ‪:‬‬
‫هً مجموعة من الجمل أو التعلٌمات التً تستقبل وسائط أو متغٌرات إدخال وترجع‪ ،‬إما قٌمة‬
‫عددٌة وإما جدول وتكون عن طرٌق استعالم ‪. SELECT‬‬

‫دوال الجداول ترجع كنتٌجة جدول‪ .‬الجدول عبارة عن نتٌجة استعالم ‪ SELECT‬وفقط‪.‬‬

‫)‪ (Fonction Scalaire‬وإذا كانت نتٌجتها جدول‬ ‫إذا كانت الدالة ترجع قٌمة فتسمى دالة عددٌة‬
‫فتسمى دالة جدول )‪(Fonction Table‬‬

‫‪ .2‬الصٌغة العامة إلنشاء الدالة العددٌة (‪)Fonction Scalaire‬‬

‫)قائمة الوسائط أو المتغٌرات @‪ (--‬إسم الدالة ‪CREATE FUNCTION‬‬


‫نوع النتٌجة المرجعة من طرف الدالة ‪RETURNS‬‬
‫‪AS‬‬ ‫والثانٌة ال‬ ‫ٌختلفان األولى بــ ‪S‬‬
‫‪BEGIN‬‬
‫)إستعالم وٌجب أن تكون نتٌجته قٌمة عددٌة ( ‪RETURN‬‬
‫‪END‬‬

‫وكما تطرقنا فً درس اإلجراءات المخزنة‪ ،‬الدالة أٌضا ٌمكن أن تكون بوسائط أو بدونها حسب‬
‫الحاجة‬
‫ولتنفٌذ الدالة ٌكون ذلك عن طرٌق استعالم‬
‫)قٌم الوسائط( اسم الدالة‪SELECT dbo.‬‬

‫‪( dbo‬اختصار ‪ )data base object‬فجمٌع‬ ‫عند التنفٌذ ٌجب أن ٌسبق اسم الدالة باالمتداد‬
‫مكونات ‪ SQL Server‬تأخذ هذا االمتداد‪.‬‬

‫‪ .3‬أمثلة عن الدوال العددٌة ‪Fonction Scalaire‬‬

‫مثال‪ :01‬فً جدول الطالب ‪ Etudiant‬نرٌد أن ننشئ دالة تقوم بحساب عدد الطلبة‬

‫أوال سنكتب االستعالم الذي ٌجٌب على السؤال وهو كالتالً‪:‬‬


‫)‪SELECT COUNT(numetu‬‬

‫‪FROM Etudiant‬‬
‫ففً هذه الحالة ٌمكن أن ننشئ دالة بدون وسائط كما ٌلً‪:‬‬
‫) ( ‪CREATE FUNCTION NBR_ETU‬‬
‫‪RETURNS int‬‬
‫‪AS‬‬
‫‪BEGIN‬‬
‫) ‪RETURN (SELECT COUNT (numetu) FROM Etudiant‬‬

‫‪END‬‬
‫وتنفٌذ الدالة كما ٌلً‪:‬‬
‫) ( ‪SELECT dbo.NBR_ETU‬‬
‫فترجع لنا فً النتٌجة قٌمة وهً التً تمثل عدد الطلبة‪.‬‬

‫مالحظة‪ :‬على خالف اإلجراءات المخزنة‪ ،‬فالدوال المخزنة وعندما تكون بدون وسائط فٌجب سواء‬
‫عند اإلنشاء أو عند التنفٌذ أن نتبع اسم الدالة بقوسٌن ()‪.‬‬

‫‪ .4‬الصٌغة العامة إلنشاء دالة الجدول (‪)Fonction TABLE‬‬

‫)قائمة الوسائط أو المتغٌرات @‪(--‬إسم الدالة ‪CREATE FUNCTION‬‬


‫‪RETURNS TABLE‬‬
‫‪AS‬‬
‫‪BEGIN‬‬
‫)إستعالم وٌجب أن تكون نتٌجته جدول( ‪RETURN‬‬
‫‪END‬‬
‫أماتنفٌذ الدالة التً ترجع لنا جدول فٌكون بالصٌغة التالٌة‪:‬‬
‫)'قٌم الوسائط'( إسم الدالة‪SELECT * FROM dbo.‬‬

‫مثال‪ :‬نرٌد البحث عن الطلبة الذٌن ٌقطنون فً مدٌنة ما ؟‬


‫فٌكون ذلك كما ٌلً‪:‬‬
‫))‪CREATE FUNCTION INFO_ETU(@ville nvarchar(50‬‬
‫‪RETURNS TABLE‬‬
‫‪AS‬‬
‫)‪RETURN (SELECT * FROM Etudiant WHERE ville = @ville‬‬

‫وتنفٌذها ٌكون بالصٌغة التالٌة‪:‬‬


‫)'‪SELECT * FROM dbo.INFO_ETU('El-Oued‬‬

‫ففً هذه الحالة نتٌجة الدالة هً عبارة عن جدول ٌتضمن جمٌع معلومات الطلبة الذٌن ٌقطنون‬
‫مدٌنة'‪'EL-Oued‬‬
‫ملخص عام لدرس اإلجراءات المخزنة و الدوال المخزنة‪:‬‬
‫هاته المكونات من شأنها أن تزٌد فً فعالٌة وتحسٌن قاعدة البٌانات‪ٌ ،‬بقى الشًء المهم هو أن‬
‫نقدر مدى حاجتنا لهاته المكونات ومتى؟ ‪ ،‬فجمٌع العملٌات المعروفة والمطبقة على قواعد البٌانات‬
‫منها ما هو قابل للتجسٌد عن طرٌق اإلجراء المخزن ومنها عن طرٌق الدوال‪ ،‬فاختٌار هذا أو ذاك‬
‫ٌبقى على حسب نوع العملٌة وحاجة المستخدم لها‪.‬‬
‫ففً اإلجراءات المخزنة مثال نستطٌع أن ندرج عملٌة ‪:‬إضافة‪ ،‬حذف و تعدٌل على جدول فً قاعدة‬
‫بٌانات بٌنما هاته العملٌات ال نستطٌع أن ننجزها عن طرٌق دالة‪ ،‬وفً الجهة المقابلة العملٌات‬
‫الحسابٌة والمقصود منها هو إرجاع قٌمة معٌنة نستطٌع أن ننجزها عن طرٌق دالة بٌنما اإلجراء‬
‫المخزن ال ٌسمح بذلك‪.‬‬
‫وفٌه عملٌات تعتبر مشتركة بٌنهم فٌكون لنا فٌها الخٌار فً اختٌار المكون المنجز لها إما الدالة‬
‫وإما اإلجراء المخزن‪ ،‬نضرب مثاال على ذلك‪ :‬بحث عن سجل فً جدول أو البحث عن جمٌع‬
‫السجالت فً جدول فهاته العملٌات ٌمكن أن تنجز عن طرٌق إجراء مخزن أو عن طرٌق دالة‪.‬‬

‫تجمٌع وإعداد األستاذ‪ :‬منصــور فتحــً‬

‫أستاذ متخصص فً التكوٌن والتعلٌم المهنٌٌن درجة ‪( 2‬تخصص إعالم آلً)‬

You might also like