المتابعون للمدونة

الاثنين، 26 سبتمبر 2016

الإجراءات المخزّنة Stored Procedures


الإجراءات المخزّنة 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.. للتنزيل:


 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر