الصفحة الرئيسية

 

المنتديات

 

الدروس التعليمية

 

قسم التصاميم

 

راسلنا

دليل المواقع صندوق الألوان خدماتنا مكتبة الصوتيات مكتبة الخطاط
سجل الزوار صفحة الفريق مكتبة الجافا مكتبة الأدوات مجلة الموقع

 

   
 
دروس الفوتشوب

 

   
 
دروس الفوتشوب

 سلسله دروس PL/SQL:الدرس االتاسع (التجميعات)

بسم الله الرحمن الرحيم

انواع التجميعات في قاعدة البيانات:

التجميعة هي مجموعة من العناصر من نفس النوع

والتجميعات هي على نوعين:

 Ø                  التجميعة varray

وهي كمصفوفة متغيرة ومشابهة للمصفوفات في اي لغة من لغات البرمجة مثل c وc++ وتتم الاشارة الى اي عنصر في هذه التجميعة باستخدام الارقام السفلية ويتم التخزين في هذه التجميعة بصورة خطية inline

Ø                  التجميعة nested table

تعتبر كجدول موجود في قاعة البيانات والاشارة الى اي عنصر في هذه التجميعة ايضا باستخدام الارقام السفلية ويتم تخزين البيانات في جدول تخزين منفصل.

--اولا :التعامل مع التجميعات في sql plus

أ -التجميعة varray  من النوع البسيط

مثال/ نفرض انك تريد انشاء جدول الاقسام في مستشفى والذي سوف يحتوي على رقم القسم , اسم القسم , واسم القسم , ومن ثم اسماء موظفين القسم .مع العلم ان اسماء الموظفين سوف تكون في تجميعة varray.

نقوم اولا بانشاء التجميعة كمايلي:

Create type namev as varray(30) of varchar2(50);

/

حيث لو فرضنا ان اكبر عدد للموظفين هو 30 واكبر طول للاسم هو 50 .

ثم نقوم بأنشاء الجدول ونقوم بانشاءه كمايلي/

Create table deptv

(nodept number(5) primary key,

namedept varchar2(50),

emp namev);

ونقوم فيمايلي بتنفيذبعض اوامر sql  على الجدول

1-     الادراج insert :

Insert into deptv values(10,'medical',namev('ali','sami','fahad','fady'));

2- التحديث update :

لتحديث العناصر في التجميعة يتطلب استخدام pl/sql ولايمكن تنفيذ ذلك من خلال sql  القياسية مثال:

Declare

   Editname namev;

   I   number:=1;

Begin

Select emp into editname

From deptv where nodept=10;

Loop

If (i=editname.count+1) then

Exit;

Elsif (editname(i)='sami') then

Editname(i):='mohammed';

End if;

i:=i+1;

end loop;

update deptv set emp=editname where nodept=10;

end;

 شرح المثال السابق:

سوف يقوم بتغير اسم الموظف sami الذي قمنا بادخال وتبديلة الى mohammed وشرح الخطوات كمايلي

اولا قمنا بتعريف متغير editname  من نفس نوع التجميعة namev وذلك لكي نقوم بتخزين المؤشر والذي يحتوي على اسماء الموظفين فيه ونعرف ايضا متغير I  وهو من يستخدم كعداد.

ثم نقوم بعمل مؤشر لاستخراج اسماء الموظفين وهي كمايلي

 

Select emp into editname

From deptv where nodept=10;

يقوم هنا باستخراج اسماء الموظفين للقسم 10 وتخزين ناتج الاستعلام في المتغير editname  والذي هو من نفس نوع التجميعة

ثم يبدأ حلقة ومن ثم يختبر هل I  وصلت الى نهاية التجميعة اذا كان نعم قام بانهاء الاجراء واذا لم يصل الى نهاية التجميعة يختبر عنصر التجميعة الحالي هل هو يساوي sami  ام لا اذا كان يساوي sami يقوم بتغير هذه القيمة الى mohammed  ومن ثم يزيد العداد بواحد ومن ثم يعود من جديد الى ان يصل الى نهاية التجميعة وبعد الانتهاء من جميع العناصر يقوم بعمل التحديث للجدول

update deptv set emp=editname where nodept=10;

ومن ثم يقوم بانهاء الاجراء.

 2-     الحذف delete(Trim) :

 حذف عنصر من التجميعة يتطلب عمل اجراء pl/sql  

والحذف في التجميعات varray  يتم على اخر عنصر في التجميعة اي لو حذفنا عنصر واحد فانه يتم على اخر  عنصر ولا يمكن تحديد العنصر

مثال:

Declare

Namedel namev;

Begin

Select emp into namedel

From deptv where nodept=10;

Namedel.trim(1);

update deptv set emp=namedel where nodept=10;

end;

/

 4- التحديث بالاضافة update(append)

هذا الامر يستخدم للاضافة

ألم يتبادر الى ذهنك كيف نضيف مزيدا من الموظفين الى القسم 10 يمكن ان تقول نستخدم الامر insert  لكن هذا غير صحيح لاننا عندما نستخدم الامر insert  وندخل رقم القسم 10 يظهر لنا خطاء لان حقل رقم القسم مفتاح رئسي

 لذلك اذا اردنا اضافة المزيد من الموظفين اولا نقوم بعمل توسع extend  للتجميعة لكي تسمح لنا باضافة عنصر جديد .ونستخدم الاجراء لذلك

 ويكون الاجراء كمايلي:

Declare

Newname namev;

Begin

Select emp into newname

From deptv where nodept=10;

Newname.extend;

Newname(newname.last):='khaled';

update deptv set emp=newname where nodept=10;

end;

/

----------------------------------------------------------------------------------------------------------------------------

ب - التجميعة varray  من النوع الشيء:

هذه التجميعة هي تجميعة معرفة بواسطة المستخدم

مثال ذلك :

لو اردنا انشاء جدول يحتوي على مسمى الوظيفة وفي حقل اخر نكّون تجميعة تحتوي على اسم الموظف وراتبة لجميع موظفين هذه الوظيفة

EMPLOYEE

JOB_NAME

(ali,5000),(sami,6000),(fahad,4000)

manager

(laui,7500),(mohammed,7500)

Analysis

(fady,8000),(saed,6000)

Programming

وبالتالي فإن الخطوة الاولى هي انشاء object  كمايلي

Create type empobj

as object (nameemp varchar2(50),salary number(6));

/

ثم نقوم بانشاء التجميعة

Create type employeeobj as varray(20) of empobj;

/

لاحظ الفرق اننا استخدمنا object  الذي انشئناه ولذلك سمي هذا النوع بهذا الاسم

وبعد انشاء التجميعة نقوم بإنشاء الجدول كمايلي:

 Create table jobobj

(job_name varchar2(50),

employee employeeobj);

 وبعد انشاء الجدول سوف نتعرف الان على كيفية التعامل مع هذا الجدول من خلال sql * plus

 1- الاضافة :

لاضافة صف إلى الجدول السابق نقوم  بمايلي :

 

Insert into jobobj values

('manager',employeeobj (

                               empobj('ali',5000),

                               empobj('sami',6000),

                               empobj('fahad',4000)));

وبهذا نكون قد اضفنا الصف الاول في الجدول السابق

ولو ذهبنا الى sql * plus وطلبنا منه مايلي

Select * from jobobj

JOB_NAME

---------------------------------------------------

EMPLOYEEobj(NAMEEMP, SALARY(

-------------------------------------------------------------

manager

EMPLOYEE1(EMPOBJ('ali', 5000), EMPOBJ('sami', 6000), EMPOBJ('fahad', 4000((

ونلاحظ لقد تم اضافة الصف الجديد

2- التحديث :  يجب تطبيق قطعة pl/sql كمايلي:

Declare

Editname employeeobj;

Editobj empobj;

i number:=1;

Begin

Select employee into editname

From jobobj where job_name='manager';

Loop

Editobj:=editname(i);

If (i=editname.count) then

Exit ;

Elsif editobj.nameemp='sami' then

Editobj.salary:=10000;

Editname(i):=editobj;

End if;

i:=i+1;

End loop;

Update jobobj set employee=editname

Where job_name='manager';

End;

وبهذا يتم تعديل راتب الموظف الذي اسمه sami الموجود في قسم manager  وجعل راتبه 10000

3- الحذف:

Declare

Editemp employeeobj;

begin

      select Select employee into editemp

From jobobj where job_name='manager';

Editemp.trim(1);

Update jobobj set employee=editemp

Where job_name='manager';

 

وبهذا يتم حذف سجل واحد وهو اخر صف من التجميعة

 

1
دروس الجافا
دروس السويش دورة الأوركال
دروس لغة ال php برمجة ال C و ++C
دروس لغة ال ASP دروس اللنكس
دروس الأكسس قواعد البيانات mysql / sql
دروس ال MCSE دروس ال html
دروس الفلاش دروس الفرونت بيج
دروس الفيجوال بيسك دروس وندوز اكس بي
دروس برمجة الدلفي    
     
 

 

     

All Rights Reserved     ©     جميع الحقوق محفوظة

2003

شبكة بكسل

www.pxll.com