|

|
سلسله دروس PL/SQL:الدرس
الخامس |

|
بسم الله الرحمن
الرحيم
شاهدنا في الدروس الماضية ان اي اجراء
نقوم بكتابة اني اذا اردت استخدامة اكثر من مرة فاني اقوم بكتابة كل مرة في sql * plus لكي احصل على النتائج لكن ماهو رأيك لو نقوم بتخزين
هذا الاجراء في قاعدة البيانات ونعطية اسم وحينما نحتاجه نستدعية باسمه وهذا يوفر
علينا الشيء الكثير لذلك درسنا هذا اليوم هو الاجرائيات المخزنة.
ولكي نقوم بانشاء اجراء مخزن
نقوم بمايلي :
CREATE [OR
REPLACE] PROCEDURE procedure_name(متغيرات
الادخال الممررة ومتغيرات الاخراج)
حيث تمثل procedure_name اسم الاجراء
المستخدم.
اما OR REPLACE فهي توضع حينما تعلم ان الاجراء موجود من
السابق.
اما عن المغيرات التي بين القوسين فهي
اما متغيرات مدخله مثل اذا كان لديك اجراء حساب معدل طالب وتريد تمرير رقم الطالب
الذي تريد حساب معدله فهذه هي تعتبر كمدخلات ولتعريف متغير بهذا الشكل يكون كمايلي
:
student_id in
number(9)
لاحظ اسم المتغير هو student_id ثم بعده وضعنا الكلمة in
ومعنى ان هذا المتغير يعتبر كمدخل
اما لتعريف متغير يعود بقيمة من
الاجراء مثلا لو اردنا تعرف متغبر يرجع بمعدل الطالب يتم التعريف كمايلي
:
ave out number(5,2)
بعد تنفيذ الاجراء يكون هذا المتغير
يحتوي على معدل الطالب الذي تم تمرير رقمه مثلا.
مع العلم انه يمكن تعريف متغير
للمدخلات والمخرجات حيث تمرر به القيمه اولا وبعد تنفيذ الاجراء يتم وضع القيمه في
نفس المتغير وتتم كمايلي :
ave in out number(5,2)
ومعنى هذا اي مدخل ومخرج في نفس
الوقت .
مـــــــــــــــــــثال
:
في الجدول الذي قمنا بدراسته في الدرس
الرابع وكان بأسم studys وكان كمايلي
:
| POINT |
MARK |
COURSE_CODE |
NO_STU |
| 13.5 |
88 |
216CS |
111 |
| 10.5 |
75 |
225CS |
222 |
| 3 |
40 |
225CS |
333 |
| 14.25 |
90 |
225CS |
111 |
| 10.5 |
78 |
216CS |
222 |
| 13.5 |
85 |
216CS |
333 |
لو اردنا تصميم اجراء مخزن لكي يقوم
بطباعة درجة الطالب بعد تمرير رقم الطالب ورقم المقرر.
الاجراء المخزن سوف يكون كمايلي
:
create or
replace procedure stu_mark( stu_id in studys.NO_STU%type, cou in
studys.COURSE_CODE%type) as mar studys.mark%type; begin select
mark into mar from studys where NO_STU=stu_id and
COURSE_CODE=cou; DBMS_OUTPUT.PUT_LINE(mar); end; /
بعد الانتهاء من تنفيذ الاجراء يكون
الاجراء مخزن في قاعدة البيانات ولكي نقوم باستدعاءه نقوم بمايلي :
begin stu_mark(111,'216CS'); end; /
لاحظ كيف تم استدعاء
الاجراء السابق من خلال اسم الاجراء وبذلك سوف يكون الناتج على الشاشة كمايلي 88 وهي صحيحة بعد تمرير رقم الطالب 111
ومقرر 216CS
لكن لاحظ اننا لم نستخدم متغيرات اخراج
لكن مأرايك ان نصمم اجراء اخر يقوم بنفس الوظيفة التي يقوم بها الاجراء
السابق لكن عملية الطباعة تكون بعد الاستدعاء لكي نجعل الاجراء يقوم بارجاع درجة
الطالب بمتغير لذلك فان الاجراء كمايلي :
create or
replace procedure stu_mark22( stu_id in studys.NO_STU%type, cou in
studys.COURSE_CODE%type, mara out studys.mark%type) as begin select
mark into mara from studys where NO_STU=stu_id and
COURSE_CODE=cou; end; /
بعد ذلك نقوم باستدعاء
الاجراء ومن ثم طباعة الدرجة لان لو لاحظت الاجراء لايقوم بالطباعة ولاحظ ايضا ان
الدرجة تم وضعها في المتغير mara ولذلك سوف يعود
بهذه القيمة وسوف يكون الاستدعاء كمايلي :
declare m
studys.mark%type; begin stu_mark1(111,'225CS',m); DBMS_OUTPUT.PUT_Line(m); end; /
وسوف يكون الناتج هو 90 وهذا صحيح بناء
على الجدول.
---------------------------------------------------------------------------------------------------------------------------------
شكرا لكم اتمنى لكم التوفيق , في الدرس
القادم سوف ناخذ مثال شامل على الاجرائيات المخزنه مثل نبدأ بالدوال(الوظائف) functiom .
مع تحيات اخوكم المخلص / حــــــمد
,,,,,,,,,,,,,,,,,,,الفريق العربي للبرمجة
|