1. الرئيسية
  2. الإحصائيات
  3. البحث
  4. جديد الدروس
  5. أخبر صديقك
  6. اتصل بنا

مكتبة الدروس دروس فوتوشوب برمجة شبكات تصميم هندسة عربي دورات  » دروس قواعد البيانات » O r a c l e » الدرس الثالث

 الدرس الثالث  أضيف في: 17-5-1427هـ
بسم الله الرحمن الرحيم

درسا في الدرس الثاني المؤشرات الصريحة والان سوف نكمل شرح ذلك

لاحظنا في المثال السابق (اخر مثال في الدرس الثاني) ان الاستعلام في cursor سوف يعود بسجل واحد لكن ماذا يحدث لو اعاد المؤشر اكثر من سجل واردنا المرور على كافة السجلات ؟

لحل السؤال السابق لابد من استخدام حلقة بها شرط وهذا هو هل سجلات المؤشر انتهت ام لا ونعرف ذلك من خلال خاصية found للمؤشر كمايلي:

mycur%found

حيث :

mycur : هي اسم المؤشر.

% : توضح انا مايلي اسم المؤشر هي احد خصائصه.

found : خاصية التي من خلالها نعرف هل تم الانتهاء من جميع السجلات ام لا

مثال :


http://www.geek4arab.com/up/files/1/or2.JPG


نريد انشاء اجراء يقوم بالمرور على الجدول وينظر الى درجة الطالب اذا كان ناجح في المقرر ام لا فاذا كان mark اكبر او يساوي 50 ضع قيمة true في حقل result والا ضع قيمة false في حقل result

نقوم اولا بانشاء هذا الجدول :

create table stu_study(
NO_STU number(4),
SUBJECT varchar2(8),
MARK number(3),
RESULT varchar2(20));

وبعد انشاء الجدول نقوم بادخال المدخلات السابقة

insert into stu_study (NO_STU,SUBJECT,MARK) values (111,'216CS',88);

insert into stu_study (NO_STU,SUBJECT,MARK) values (222,'225CS',75);

insert into stu_study (NO_STU,SUBJECT,MARK) values (333,'225CS',40);

بعد ذلك نقوم بانشاء الاجراء:

declare
mar number(3);
no number(3);
cursor res_stu is
select no_stu,mark
from stu_study;
begin
open res_stu;
loop
fetch res_stu into no,mar;
exit when res_stu%notfound;
if mar>=50 then
update stu_study set result='TRUE' where no_stu=no;
else
update stu_study set result='FALSE' where no_stu=no;
end if;
end loop;
close res_stu;
end;
/

وبهذا تكون النتائج في الجدول كمايلي :


http://www.geek4arab.com/up/files/1/or3.JPG

هل رأيتم سهوله ذلك والفائد الكبيرة من المؤشرات.

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

هناك طريقة اخرى لتعريف المتغيرات لاحظ في الجدول السابق ان الحقل no_Stu تم تعريفه على انه من نوع number وتم تعريف المتغير no في الاجراء على انه number ايضا لكي يتم وضع رقم الطالب فيه لكن لاحظ لو تم تغير نوع الحقل في الجدول من number الى varchar2 فانه يجب عليك تغير نوع المتغير no في الاجراء ايضا لكن هناك طريقه تجعلك لاتعدل الاجراء كل مرة وهي استخدام الامر التالي لتعريف المتغير no في الاجراء

NO stu_study.no_stu%type

حيث :

NO هي اسم المتغير

stu_study : اسم الجدول

no_stu : الحقل المطلوب في الجدول

%type : خاصية نوع الحقل

ومعنى ماسبق قم بتعريف متغير اسمه no له نفس نوعية الحقل الذي اسمه NO_STU الموجود في الجدول stu_study .

وبهذا لان تقوم بتغير نوع العنصر في الاجراء في كل مرة تغير النوع وهكذا مع جميع المتغيرات التي لها صله بالجداول

وبذلك يصبح الاجراء بعد التعديل كمايلي:

declare
mar stu_study.mark%type;
no stu_study.no_stu%type;
cursor res_stu is
select no_stu,mark
from stu_study;
begin
open res_stu;
loop
fetch res_stu into no,mar;
exit when res_stu%notfound;
if mar>=50 then
update stu_study set result='TRUE' where no_stu=no;
else
update stu_study set result='FALSE' where no_stu=no;
end if;
end loop;
close res_stu;
end;
/

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

وبهذا نكون انهينا المؤشرات الصريحه

والدرس القادم سوف يكون على المؤشرات الضمنية و الجداول مع مجموعة امثله

---------

اذا لم تفهم اي حاجة انا بأتم الاستعداد للاجابة وشكرا لكم

اخوكم/ حمد المهندس
الكاتب: حمد المهندس انقر هنا لمراسلة حمد المهندس أنقر هنا للإنتقال إلى موقع حمد المهندس إضافة للمفضلة إضافة لمفضلة Google إضافة لمفضلة Delicious إضافة لمفضلة Digg إضافة لمفضلة Facebook
خيارات الدرس : ارسل الدرس لصديق ارسل الدرس لصديق  طباعة الدرس طباعة الدرس 

التعليقات
»مجهول
  أضيف في: 22-9-1429هـ
جزاكم الله خيرا ووفقك لما فية الخير على هذا المجهود الاكثر من رائع.