الإجراءات المخزّنة Stored Procedures:
الإجراءات المخزّنة هي برامج قصيرة مكتوبة بلغة T-SQL الخاصة بسيكويل سيرفر ، ويتم حفظها في
قاعدة البيانات وتنفيذها على الخادم Server، لأداء وظيفة معيّنة على قاعدة
البيانات.
ويمتاز
الإجراء المخزن بالمميزات التالية:
1- يقوم
SQL Server بترجمة Compile الإجراءات المخزّنة مرّة واحدة
عند إنشائها، وبالتالي فهي تعمل أسرع من جمل SQL
العاديّة.
2- اختصار الكود، بسبب قدرتك على استدعاء نفس الإجراء
المخزن من برامج مختلفة أو من أكثر من موضع من نفس البرنامج.
3- سهولة التعديل في الإجراء المخزن بدون تغيير أكواد
البرامج التي تستخدمه، وذلك لأنه موجود في قاعدة البيانات.
4- الإجراءات المخزنة أكثر مناعة ضد دس الاستعلامات SQL Injection كما سنرى فيما بعد.
وتسمّى اللغة التي تكتب بها الإجراءات المخزّنة T-SQL اختصارا لـ (Transact-SQL)، وهي نسخة مطوّرة من SQL
خاصة بسيكيول سيرفر كما ذكرنا سابقا.
ويبدأ الإجراء المخزن بجملة التعريف التالية:
CREATE PROCEDURE dbo.SP1
حيث إن SP1 هو اسم الإجراء، ويمكنك تغييره
إلى أيّ اسم يناسبك.
لاحظ أن الجملة CREATE
PROCEDURE
تستخدم عند إنشاء الإجراء المخزن للمرة الأولى، لكن بمجرد حفظه تتحول إلى ALTER PROCEDURE، لأنك ستعدل فيه بعد ذلك ولن تعيد إنشاءه من جديد.. ولو حاولت
استخدام CREATE PROCEDURE مع نفس اسم الإجراء المخزن مرة أخرى فستحصل على خطأ
يخبرك أن هذا الإجراء موجود من قبل، لهذا لو كنت تقصد إعادة حفظ نفس الإجراء بعد
التعديل، فتأكد من أنه يبدأ بالفقرة ALTER
PROCEDURE.
بعد هذا يأتي تعريف معاملات الإجراء.. وتبدأ المتغيّرات
في لغة T-SQL بالرمز @.. والجملة التالية تعرّف معاملا نصّيا طوله ثلاثة أحرف:
@Str1 nvarchar(3)
كما ترى: تكتب اسم المعمل، يليه نوعه.
وعند وجود أكثر من معامل، توضع العلامة "," للفصل بينها.
ويمكن أن تضع للمعامل قيمة افتراضيّة، بحيث لو لم يُرسل
هذا المعامل، يقوم الإجراء باستخدام هذه القيمة:
@Str2 nvarchar(7) = 'افتراضي'
وتوضع
معاملات الإجراء بينَ قوسين ( )، ولا يشترط أن تكتب في سطر واحد.
ويبدأ الإجراء المخزّن بالكلمة AS،
وينتهي بالكلمة RETURN، وبينهما الكود:
AS
………..
RETURN
ويمكنك تعريف المتغيّرات داخل الإجراء، باستخدام الجملة DECLARE:
DECLARE @Str3 nvarchar(7)
ويمكنك كتابة جمل الشرط كالتالي:
IF @Str3 = ''
BEGIN
SELECT @Str3 = 'ABC'
END
وإذا كان مقطع الشرط جملة واحدة، فلسنا بحاجة إلى BEGIN
و END:
IF @Str3 = ''
SELECT @Str3 = 'ABC'
لاحظ استخدامنا للتعبير SELECT
لتغيير قيمة المتغيّر @Str3.. يمكنك كذلك استخدام التعبير SET
لتغيير قيمة المتغيّر، وهو ليس مربكا مثل SELECT:
SET @Str3 = 'ABC'
ويمكن أن تضع في المتغيّر ناتج جملة SELECT ـ طبعا إذا كانت تعيد قيمة واحدة، كأن تكون بها دالة من دوال
التجميع Aggregate Functions أو يكون الجدول الناتج عبارة عن خانة واحدة ـ
كالتالي:
SET @Str3 =
(SELECT Book FROM Books WHERE ID = 3)
والآن، ما رأيك أن نكتب إجراء مخزّنا نرسل إليه اسم
المؤلف، فيعيد إلينا الكتب التي ألفها؟
افتح
فيجوال ستديو، وفي متصفّح خوادم الإنترنت Server Explorer، أسدل العناصر التي تنتمي لاتصال قاعدة البيانات Books.mdf التي أنشأناها بـ SQL Sever.. من هذه العناصر اضغط بزرّ
الفأرة الأيمن على "الإجراءات المخزّنة" Stored Procedures، ومن القائمة الموضعيّة اضغط الأمر New Stored Procedure.. ستظهر لك نافذة تحرير الإجراء المخزّن.. اكتب بها هذا الإجراء:
CREATE PROCEDURE dbo.GetAuthorBooks
(
/*لدينا
معامل واحد فقط نستقبل فيه اسم المؤلف
وقد جعلناه 30 حرفا ليتلاءم مع طول حقل
المؤلفين
*/
@Author char(30)
)
AS
IF @Author <>'' /* تأكّد أن اسم المؤلف غير فارغ*/
BEGIN
/*هذه
جملة استعلام عاديّة تماما*/
SELECT Book
FROM Books, Authors
WHERE Author = @Author
AND AuthorID = Authors.ID
END
RETURN /*وجود هذه الكلمة في أيّ
موضع يؤدّي إلى إنهاء الإجراء*/
أعتقد أن الأمر في غاية البساطة.
ولا حاجة لألفت نظرك إلى أن التعليق في لغة T-SQL يوضع بين العلامات /* */.. هذه الرموز تتيح لك كتابة التعليق على أكثر من سطر.. فإذا أردت
أن تكتب سطرا واحدا كتعليق، فيمكنك أن تضع في بدايته العلامتين --.. مثال:
/* هذا
تعليق
على
سطرين*/
--بينما هذا تعليق في سطر واحد
ولا بدّ أنك لاحظت ظهور الجملة SELECT
في نافذة الإجراء السابق في مستطيل.. اضغط بزرّ الفأرة الأيمن داخل هذا المستطيل،
ومن القائمة الموضعيّة اختر الأمر "تصميم مقطع الاستعلام" Design SQL Block.. ستظهر لك نافذة باني الاستعلام Query Builder، حيث يمكنك استغلاله لتطوير الجملة واختبارها.
كما يمكنك استخدام باني الاستعلام لتصميم جملة SQL مباشرةً منذ البداية.. اضغط بزرّ الفأرة الأيمن في الموضع الذي
تريد كتابة الجملة فيه في الإجراء المخزّن، ومن القائمة الموضعيّة اضغط الأمر Insert SQL.. ستظهر لك نافذة باني الاستعلام.. صمّم جملة SQL التي تريد، وقم بحفظ العمل.. الآن لو عدت إلى نافذة الإجراء
المخزّن، فستجد أن جملة SQL قد أضيفت للموضع الذي ضغطت فيه الفأرة.
نريد الآن اختبار الإجراء الذي كتبناه.. اضغط بزرّ
الفأرة الأيمن في أيّ موضع من نافذة الإجراء، ومن القائمة الموضعيّة اضغط الأمر Run Stored Procedure.. ستظهر لك نافذة تسألك عن قيمة معامل الإجراء..
اكتب اسم (توفيق الحكيم) واضغط OK.. سيتمّ تنفيذ الإجراء، حيث ستظهر
أسماء كتب (توفيق الحكيم) في نافذة المخرجات Output Window.
من
كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل: