الانتقال إلى المحتوى

how to make cursor


Fathi

Recommended Posts

الزملاء الاعضاء
السلام عليكم واعانكم الله في افادة الناس جميعاً
سؤالي هو عن كيفية بناء cursor اي اجزاؤه كاملة البداية والنهاية به
يفضل وضع مثال صغير كامل
مع جزيل الشكر للجميع

رابط هذا التعليق
شارك

السلام عليكم
اولا الكيرسور هو عبارة عن جملة سيليكت يتم استخدامها في لغة plsql
و لذلك لعدة اغراض مثل اذا كنا نريد ان نقوم باكشن معين علي مجموعة من السجلات فنقوم بعمل كيرسور
و فتحه و القيام بمل نريد عليه
و يجب ان نعرف ان كل جملة سيليكت نقوم بها هي ايضا تفتح في كيرسور و لكنه كيرسور خاص باوراكل
و يسمي
implicit cursor
اما اذا قام المطور بكتابة كيرسور خاص به و التعامل معه فيمسي
explicit cursor
و يوجد الكثير من المعلومات و الطرق للتعامل مع الكيرسور ممكن لنا ان نعرف الاساسي منها الان
و لنأخذ مثلا مثال انك في برنامج شئون موظفين و تريد ان تزيد راتب الموظفين بناء علي معايير معينة وتوجد لديك هذه المعايير في بروسيدر تسمي raise_sal
للقيام بما نريده لا نستطيع استعمال السكول فقط لذلك لابد من استخدام ال plsql
سأكتب الكود ثم نشرحه

DECLARE  
CURSOR  EMP_CURSOR IS  
SELECT EMPNO FROM  EMP;
BEGIN  
FOR REC IN  EMP_CUR LOOP 
RAISE_SAL(REC.EMPNO);
END LOOP;
END;


من المثال السابق يتضح الاتي ان طالما الكيرسور هيرجع اكتر من ريكورد لذا يجب التعامل معه في لووب
اللوب المستخدم هنا هو اسهل و ابسط الانواع و هو الFOR LOOP وهو لا يحتاج ال ي تعريف المتغير الذي نقوم فيه باحضار الداتا من الكيرسور كما لا نضع شرط للخروج منه اذ انه يخرج عند انتهاء الداتا في الكيرسور
و يجب استعماله عندما نريد ان يتم معالجة كل السجلات التي توجد بالكيرسور
و اذا نظرنا الي الكود نجد ان اول خطة لاستعمال الكيرسور هي تعريفه في الجزء الخاص بالتعريف و تعريفه يكون كالتالي
باستخدام كلمة CURSOR ثم اسم الكيرسور ثم كلمة IS ثم جملة السيليكت و سيمي كولون في اخر الجملة ثم في الجزء التنفيذي من البلوك نقوم باستخدام الFOR LOOP لفتح الكيرسور و احتيار كل سجل و تطبيق البروسيدر عليه و عند الانتهاء من كل السجلات سينتهي اللوب و يتم غلق الكيرسور اوتوماتيكيا
و كيفية الاشارة الي الحقول التي تكون في الكيرسور تتم ب كتابة اسم المتغير في اللوب و هو هنا REC
ثم اسم الكولمن الموجود في السيليكت الخاصة بالكيرسور
كالاتي
REC.EMPNO
و اللوجيك الخاص بالكود هنا كالاتي
انه يفتح الكيرسور ثم يجيب اول ريكورد يطبق عليه البروسيدر ثم يري اللوب اذا كان هناك سجلات باقية في الكيرسور اذا كان هناك يجيب السجل اللي بعده و يطبق عليه البروسيدر و هكذا حتي تنتهي الداتا و اذا انتهت يغلق الكيرسور و ينتهي اللووب
ويوجد العديد من الاشياء الخاصة بالكيرسور و لكنها تحتاج الي كتب :D
بالتوفيق

تم تعديل بواسطة hanon_OCP
رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية