سلسلة تعلم 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.com/toadmysql/FreewareDownload.htm
و هي صورة للبرنامج تحتوي على شرح بسيط
تكوين اول بروسيجر
الصيغية الاساسية لتكون
Create Procedure procedureName() Begin // هنا الاكواد البرمجية و الاستعلامات End
الان سوف نقوم بكتابة برنامج صغير سوف استخدم Toad و انت ايضا قم بتحميل هذا البرنامج الرائع
لانشاء Procedure جديد
الان نقوم بنشاء وحدة برمجية بسيطة تعيد لنا اسم هذا اسم هذا المنتدى
الان لنذهب الى MySQL Line Command و نستعدي البروسيجر
يتم استعداء البروسيجر بواسطة CALL يليها اسم البروسيجر
المتغيرات
المتغيرات هي مكان يحجز لخزن البيانات و القيم داخل الProcedure
انواع البيانات في MySQL Proceder هي نفس انواع الاعمدة MySQL
INT , SMALLINT , DATETIME, VARCHAR ... الى اخره
و تتبع نفس قوانين اسماء الجداول و لا يمكنك استعمال اسماء قواعد البيانات او الجداول كا اسم لهذه المتغيرات
يتم تصريح المتغيرات بعد الكلمة المفتاحية DECLARE
امثلة
Declare varName INT Declare varName2 VARCHAR(10) DECLARE varName3 DATETIME
عند تصريح المتغير تكون قيمتة null يمكن تغيرها
يمكن تغيرها بعد اضافة DEFAULT و كتابة القيمة
DECLARE varName INT DEFAULT 5
تغير قيمة المتغيرات
هناك طريقتان لتغير قيمة المتغرات في ال MySQL
الاول استعامل الكلمة المفيتاحية Set
DECLARE myVar INT DEFAULT 6; SET myVar = 50;
DECLARE myVar VARCHAR(120); DECLARE myVar2 VARCHAR(120); SET myVar = myVar2;
الطريقة الثانية اضاف ناتج استعلام الى المتغيرات بستخدام ال INTO
DECLARE UserName VARCHAR(120); SELECT Name INTO UserName From Users Where userID = 3;
Parameters العوامل
مافائدة الوحدة ان لم نستطيع تمرير و استرجاع قيم من خارج الوحدة
هناك ثلاث انواع من العوامل في الMySQL
IN , OUT, INOUT
IN :- و هو القيمة الافتراضية لكل عامل عند تصريح العامل IN تصتطيع من خلالها جلب قيمة من خارج الوحدة و تستطيع تغير قيمة هذا العامل داخل الوحدة ولكن بدون ارسالها خارج الوحدة
OUT:- قيمة تبدى بقيمة null و تستطيع تغير قيمتها ثم ارسالها القيمة الجديدة خارج الوحدة
INOUT :- و هي عبارة عن دمج النوعان السابقان
امثلة
مثال ادخال قيمة عن طريق IN
CREATE PROCEDURE GetName(IN ID INT) BEGIN SELECT Name From users Where userID = ID; END;
مثال اخراج قيمة عن طريق ال OUT
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
سوف اعمل على الدرس الثاني بعد ان ارى تفاعلكم مع الموضوع