|
 |
سلسله دروس PL/SQL:الدرس
السابع (الحزم) |
 |
بسم الله الرحمن الرحيم
تعلمنا سابق كيفية انشاء الاجراءت والوظائف
المخزنة. لكن مارأيك لو وجد لدينا قاعدة بيانات كبيرة جدا ولنضرب مثال انها تحتوي
على 50 اجراء او وظيفة وظيفة او اجراء لها عمل خاص ولنفرض ان هذه القاعدة هي لمحل
تجاري ضخم يحتوي على بيانات العملاء وبيانات الموظفين وبيانات الاصناف التجارية
وبيانات المخزون وغيرها من بيانات , ولذلك فان بعض هذه الاجرائيات والوظائف المخزنة
مختص بالعملاء مثلا وجود اجراء لحساب اجمالي عميل وغيرها من الاجرائيات , ومثل وجود
اجرئيات خاصة بالموظفين مثلا اجرائية خاصة بحساب راتب الموظف بعد حذف الحسومات
واضافة العلاوات وغيرها ايضا , لكن وضعها في هذا الشكل في قاعدة البيانات قد يسسب
لك بعض الارباك لذلك مارأيك بان تجمع كل الوظائف والاجرائيات الخاصة بكل قسم في
مجموعة لوحدها وهذه المجموعة تدعي الحزمه package مثلا
نجمع كل اجرائيات والوظائف الخاصة بالعملاء في حزمة خاصة
فوائد استخدام الحزمة
:
1- تجميع وحدات pl/sql المرتبطة. 2- اداء
افضل. 3- تكون السرية افضل. 4- اهم شيء هو في عملية الصيانه حيث تسهل عملية
الصيانة باستخدامم الحزم.
مكونات الحزم
:
تتكون الحزمة من جزءين الاول وهو الوصف
specification ويحتوي على التعاريف مثل متغيرات او مؤشرات او اسماء الاجراءت
ومتحولتها. اما الجز الثاني فهو جسم الحزمة ويحتوي على تفاصيل الاجراءت
والعمليات وغيرها والصيغة العامة لانشاء الجزء الاول كمايلي :
CREATE OR REPLACE
PACKAGE pack_name
AS ......... ......... ......... end;
والصيغة العامة لانشاء الجزء الثاني
كمايلي :
CREATE OR REPLACE
PACKAGE BODY pack_name AS ......... جسم
الحزمة ......... end;
لكن يجب ان يكون اسم الحزمة
في الجزء الاول هو نفس اسم الحزمة في الجزء الثاني.
مـــــــــــــــــــثال
:
لنقم بانشاء حزمة تحتوي على وظيفة لحساب معدل
طالب واجراء لطباعة المعدل ولذلك سوف نستخدم نفس الوظيفة التي انشناها في الدرس
السادس والتي اسمها stu_avea والتي تقوم بحساب معدل الطالب والان نبداء بانشاء
الحزمة . الجزء الاول من الحزمة specification كمايلي
:
CREATE OR REPLACE PACKAGE student
AS function stu_avea(stnum in
studys.NO_STU%type)return real; procedure
print_ave(avrage
in real); end;
الان نقوم بانشاء جسم
الحزمة والتي تحتوي على التفاصيل.كمايلي
CREATE OR
REPLACE PACKAGE BODY student AS function stu_avea(stnum in
studys.NO_STU%type) return real as hour courses.hours%type; avrage
number(4,2); sum_hours courses.hours%type:=0; point
studys.POINT%type; total_Point studys.POINT%type:=0; codem
courses.CODE%type; cursor sumpoint is select COURSE_CODE,POINT from
studys where NO_STU=stnum; begin open sumpoint; loop fetch
sumpoint into codem,point; exit when sumpoint%notfound; select
hours into hour from courses where
code=codem; total_Point:=total_Point+point; sum_hours:=sum_hours+hour; end
loop; close sumpoint; avrage:=total_Point/sum_hours; return
avrage; end;
procedure print_ave(avrage in
real) as begin DBMS_OUTPUT.PUT_LINE(avrage); end; end;
ويحتوي جسم الحزمة كمانلاحظ على مكونات
الوظيفة والاجراء الذي تم تعريفهما في وصف الحزمة حيث ان الوظيفة لحساب المعدل
والاجراء لطباعة المعدل.
*** طريقة استدعاء اجراء
او وظيفة موجود داخل حزمة :
تتم عملية الاستدعاء كمايلي :
pack_name.func_proc_name
اي اسم الحزمة اولا ثم نقطة ثم اسم
الاجراء او الوظيفة مـــــــثال :
set
serveroutput on declare aa
real; begin aa:=student.stu_avea(111); student.print_ave(aa); end; /
وبعد التفيذ يكون الناتج هو معدل
الطالب الذي رقمه 111 لاحظ اول شي استدعينا داله حساب المعدل ووضعناها في المتغير
aa ثم استدعينا اجراء الطباعة ليتم طبعة على
الشاشة.
والان و بعد ان تعرفت على فائدة الحزم
مارأيك من الان فصاعد ان تستخدم الحزم في كتابة الاجرائيات والوظائف
.
-----------------------------------------------
شكرا لكم ,,,,, اخوكم حمد.
|