سلسلة تعلم MySQL Stored Procedures
الدرس الاول :- ماهي الوحدات البرمجية / المتغيرات / العوامل

ماهو البروسيجر:- و هو وحدة برمجية تخزن داخل ال MySQL تحتوي على ايعازات برمجية بسيطة بالضافة الى الاستعلامات و يمكن استدعائها من اي لغة برمجة او عند حدث (Event) او عند تشغل قادح (Trigger)
بعد الاصدار الخامس بدء دعم الوحدات البرمجية داخل الMySQL و هو اضافة من اهم الاضافات التي تم اضافتها الى ال MySQL الان يمكنك كاتبة الوحدات كما الحال مع انواع القواعد البيانات الكبيرة مثل Oracle و MsSQL النسخ القديمة لا تدعم ال Stoned Procedures

ما هي فوائدها
1- عند انشاء البروسيجر يتم ترجمته (compiled) داخل السيرفر مما يزيد من الاداء و السرعة اي ان الProcedures هي اسرع من الاستعلامات الاعتيادية
2- يمكن استعاء نفس الكود البرمجي من اماكن عديدة اي بمعنى ادق يمكنك كتابة برنامج صغير يتم تنفيذه من اي مكان خارج او داخل قواعد البيانات
3- الامن يمكنك الان اعطاء صلاحيات استعمال البروسيجر و تمنع المستخدمين من روئية الجداول مباشرةً
4- تقلل الحزم المنقولة من السيرفر اي عند استخدام الProcedures سوف يتم ارسال اسم البروسيجر مع Parameters فقط بدون ارسال الاستعلام كامل
5- ان كنت مدير قواعد البيانات يمكنك اخفاء اسماء الجداول عن المبرمج و اخبار باسماء البروسيجرات التي يمكن استعدائها فقط

الاضرار
يوجد ضرر واحد فقط عن استخدام البروسيجر و هو سوف تضيف حملاً زائدا على السيرفر في بعض الاحيان


قبل البداية بالدرس سوف اخبركم عن اداء رائعة يمكن كتابة اي Procedure من داخلها انا شخصيا استخدمها
الاداء هي Toad for MySQL
و هذا رابط التحميل
http://www.toadsoft....areDownload.htm
و هي صورة للبرنامج تحتوي على شرح بسيط

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

تكوين اول بروسيجر
الصيغية الاساسية لتكون
plain text
Create Procedure procedureName()
Begin
// هنا الاكواد البرمجية و الاستعلامات
Endالان سوف نقوم بكتابة برنامج صغير سوف استخدم Toad و انت ايضا قم بتحميل هذا البرنامج الرائع
لانشاء Procedure جديد

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

الان نقوم بنشاء وحدة برمجية بسيطة تعيد لنا اسم هذا اسم هذا المنتدى

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

الان لنذهب الى MySQL Line Command و نستعدي البروسيجر
يتم استعداء البروسيجر بواسطة CALL يليها اسم البروسيجر

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

المتغيرات
المتغيرات هي مكان يحجز لخزن البيانات و القيم داخل الProcedure
انواع البيانات في MySQL Proceder هي نفس انواع الاعمدة MySQL
INT , SMALLINT , DATETIME, VARCHAR ... الى اخره
و تتبع نفس قوانين اسماء الجداول و لا يمكنك استعمال اسماء قواعد البيانات او الجداول كا اسم لهذه المتغيرات

يتم تصريح المتغيرات بعد الكلمة المفتاحية DECLARE
امثلة
plain text
Declare varName INT
Declare varName2 VARCHAR(10)
DECLARE varName3 DATETIME

عند تصريح المتغير تكون قيمتة null يمكن تغيرها
يمكن تغيرها بعد اضافة DEFAULT و كتابة القيمة
plain text
DECLARE varName INT DEFAULT 5


تغير قيمة المتغيرات
هناك طريقتان لتغير قيمة المتغرات في ال MySQL
الاول استعامل الكلمة المفيتاحية Set
plain text
DECLARE myVar INT DEFAULT 6;
SET myVar = 50;


plain text
DECLARE myVar VARCHAR(120);
DECLARE myVar2 VARCHAR(120);
SET myVar = myVar2;


الطريقة الثانية اضاف ناتج استعلام الى المتغيرات بستخدام ال INTO

plain text
DECLARE UserName VARCHAR(120);
SELECT Name INTO UserName From Users Where userID = 3;

Parameters العوامل
مافائدة الوحدة ان لم نستطيع تمرير و استرجاع قيم من خارج الوحدة
هناك ثلاث انواع من العوامل في الMySQL
IN , OUT, INOUT

IN :- و هو القيمة الافتراضية لكل عامل عند تصريح العامل IN تصتطيع من خلالها جلب قيمة من خارج الوحدة و تستطيع تغير قيمة هذا العامل داخل الوحدة ولكن بدون ارسالها خارج الوحدة
OUT:- قيمة تبدى بقيمة null و تستطيع تغير قيمتها ثم ارسالها القيمة الجديدة خارج الوحدة
INOUT :- و هي عبارة عن دمج النوعان السابقان

امثلة
مثال ادخال قيمة عن طريق IN
plain text
CREATE PROCEDURE GetName(IN ID INT)
BEGIN
SELECT Name From users Where userID = ID;
END;

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

مثال اخراج قيمة عن طريق ال OUT
plain text
CREATE PROCEDURE GetName(IN ID INT, OUT UserName VARCHAR(50))
BEGIN
SELECT Name INTO UserName From users Where userID = ID;
END;

نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

عند اضافة الرمز @ قبل المتغير فهذا المتغير سوف يستمر حتى نهاية الSession
اما باقي المتغيرات في دورة حياتها تكون بين Begin و ال End

وصلنا الى نهاية الدرس الاول و في النهاية واحب منزلي (فروض منزلية)

السؤال الاول
اكتب Procedure نرسل له عاملان الاول من نوع IN و الثاني من نوع OUT
وضيفتية هي وضع قيمة العامل IN في العامل OUT

اكتب Procedure نرسل له 4 عوامل من نوع IN و يقوم بادخالها الى قاعد البيانات
INSERT INTO Users (ID , Name , Country , age) value(?,?,?,?)

اكتب Procedure يعيد لنا 3 عوامل(Name , Country, Age) بعد ارسالة له عامل واحد ID
و يجلب المعلومات من جدول في قاعد البيانات Users

سوف اعمل على الدرس الثاني بعد ان ارى تفاعلكم مع الموضوع