MuhammadYassein بتاريخ: 27 يناير 2008 تقديم بلاغ مشاركة بتاريخ: 27 يناير 2008 بسم الله الرحمن الرحيم يعد الكيرسور Cursor من اهم ادوات المبرمج كوسيلة للتعامل مع البيانات .. فهو كائن له معاملة خاصه جدا و طرق استخدام متعدده و فوائد لا تعد و لا تحصىهل للكيرسور اصناف معينة .؟نعم و يصنف الى صنفين رئيسين هما Implicit Cursorو هو الكيرسور الذي تنشة قاعدة البيانات نفسها بدون تدخل المبرمج .Explicit Cursorو هو الكيرسور الذي يقوم المبرمج بأنشاءه بنفسه بشكل صريح .ما هو الكيرسور ؟بشكل بسيط جدا.. يمكن ان نقول ان الكيرسور هو خزان مؤقت للبيانات في ذاكرة الجهاز... يمكن ان نقول ان الكيرسور هو جدول يحمل حجم كبير من البيانات يُحمل على الذاكرة يمكن ان نقول ان الكيرسور هو متغير من نوع خاص للتعامل مع بيانات الجدول مرة واحدة هل للكيرسور مكونات ؟نعم الكيرسور باعتبارة كائن مثل اي كائن اخر في قاعدة البيانات له خصائص و مكونات و مجموعة من السمات .كيف يتم التعامل مع الكيرسور .؟اولا لابد من انشاء كائن يرث صفات الكيرسور و ذلك بتعريفه في منطقة الاعلان عن المتغيرات Declaration Section Declare Cursor Emp_Cur is select * from emp; الان قمنا بأنشاء كيرسور جديد اسمة Emp_Cur مجهز لحمل بيانات جدول الموظفين Emp انا بفضل ان اسم الكيرسور ينتهي ب _Cur للدلالة على ان هذا الكائن كيرسور او خزان بيانات يمكن وضع اي شروط لجملة الاستعلام لبناء الكيرسور الان لا بد من فتح هذا الكيرسور ... يعني ايه فتح الكيرسور يعني ... تحميل البيانات من قاعدة البيانات الى الخزان كأنك بترفع المياه من البئر لخزان المياة . Begin Open Emp_Cur; .. .. .. بعد هذة المرحلة لابد من الحصول على بيانات من هذه الخزان و نشرب من البيانات اللي احنا عاوزينها ......... Fetch Emp_cur Into Emp_Rec; ... ... خلي بالك لازم يكون فيه وعاء مناسب لاستيعاب البيانات من الخزان ... لذلك نعرف متغير مركب Composite Variable من نفس نوع خزان البيانات Emp_Rec Emp_cur%RowType; الان يمكن اغلاق الخزان لمنع تسرب المياة ........ و عدم التحميل الزائد على مصلحة المياة عفوا ....... الذاكرة ....... Close Emp_Cur; يمكن الان التعامل مع البيانات الموجوده في Emp_Rec كأي متغير عادي جدا جدا جدا ........ v_Ename := Emp_rec.Ename ; v_Empno := Emp_rec.Empno ; V_sal := Emp_rec.Sal; Example declare Cursor Emp_cur is select * from emp; Emp_rec Emp_cur%RowType; begin open Emp_cur; fetch Emp_cur into Emp_rec; dbms_output.put_line(Emp_rec.Ename || Emp_rec.Sal); close Emp_cur; end; ايه يا عم ده ......... هو انا بعمل كل القصه ديه علشان اجيب مرتب الموظف و اسمة .......... ؟؟؟؟؟؟؟لا طبعاُ...انت ممكن تدخل الخزان في دورة مياة ........ عفوا..........دورة بيانات Loop for I .. 1 .. 1000 loop Fetch Emp_Cur into Emp_rec; v_Ename := Emp_rec.Ename; V_Sal := Emp_rec.Sal; Exit when Emp_cur%NotFound; end loo; iممكن أسأل حضرتك سؤال يا مستر محمد ياسين ...؟؟؟تفضل...هو مفيش حاجة اسهل من كده ؟؟؟فيه طبعا .......ممكن نلغي الخطوة بتاعت فتح الخزان ............يا سلام ..........اه طبعا ُ .....................اقولك كمان ممكن نلغي كمان ......... تعريف متغير مركب Emp_rec .....لاء ......... بجد ...............أه ...طبعاُ .و ممكن كمان نلغي مرحلة اغلاق الخزان ...........و ممكن كمان نلغي مرحلة الحصول على البيانات Fetch Into ...........معلش يا مستر ....... حاسس انك بتضحك عليٍ .......شوف المثال ده و بطل قلة ادب ....Exanmple declare Cursor Emp_cur is select * from emp; begin FOR i IN Emp_cur loop dbms_output.put_line(i.Ename ||' ' ||i.Sal); end loop; end; و كده اختصرنا العمليةصدقتني يا عم ..........كمان حاجة جميلة شوية ممكن كمان نلغي مرحلة الاعلان عن الكيرسور ................ بجد .. begin FOR i IN (select * from emp) loop dbms_output.put_line(i.Ename ||' ' ||i.Sal); end loop; end; ماشي انا مصدقك .. بس انت قلت فيه سمات خاصة بالمؤشر .......ايه السمات ديه ...؟سواء كان الكيرسور Explicit او Implicit له مجموعة سمات و هي %IsOpen --- to Check If Cursor Is Open or Not %RowCount to Determine Number or Record in Cursor %Found if Cursor Contain Data %NotFound to Determine if Cursor Not contain data Example begin delete emp where deptno=10; dbms_output.put_line(SQL%rowCount || 'Row Deleted'); end; هذا المثال لاظهار رسالة بعدد الصفوف التي تم حذفها ..و هذا المثال يمثل الكيرسور من نوع Implicit لان قاعدة البيانات هي التي انشأت الكيرسور و ليس االمبرمج يعني لو عملت اي جمل تتعامل مع الجداول في قاعدة البيانات سواء اضافة او حذف او تعديل سوف تقوم اوراكل بانشاء كيرسور للتعامل مع البيانات بشكل ضمني و عمل الدوران السابق دون ان تشعر بأي ألم او صداع .........كيف اتعامل مع الكيرسور من نوع Implicit ?؟للتعامل معه نستخدم SQL% SQL%RowCount SQL%Found ... ... و لا ننسي ان الامثلة الاولى تمثل Explicit Cursor لاننا نحن الذين عرفنا الكيرسور ...........اما المثال الاخير كمتا قلنا هو Implicit Cursor'طبعا هناك المزيد في الكيرسور سوف اتحدث علية لاحقاُ ان شاء الله تعالى ........... وعلى فكرة قبلا ما انسي بالنسبة احنا فقط تحدثنا عن الكيرسور الثابت بس ..............!!!!يعني يا مستر فيه حاجة اسمها كيرسور متغير .....؟؟؟ايوه .........و فيه كمان طرق اضافة معاملات للكيرسور ..............و ما هي المراحل التي يمر بها الكيرسور ... ؟.قريبا ان شاء الله تعالى .............ارجو للجميع الاستفادة .....أسالكم الدعاء ........ 3 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
عبداللطيف بتاريخ: 28 يناير 2008 تقديم بلاغ مشاركة بتاريخ: 28 يناير 2008 الف شكر اخي الكريم وننتظر المزيد ..... شرح موفق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
المبرمج الصاعد بتاريخ: 28 يناير 2008 تقديم بلاغ مشاركة بتاريخ: 28 يناير 2008 السلام عليكم؟؟؟شكرا جزيل على نبسيط المعلومة بهدا اللأسلوب الرائع ؟نتظر إكمال الموضوع؟ولك مني جزيل الشكر والتقدبر!!!! اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Wise بتاريخ: 28 يناير 2008 تقديم بلاغ مشاركة بتاريخ: 28 يناير 2008 (معدل) جزاك الله خيرايا ريت دروس اخرى من هذه النوعية تم تعديل 28 يناير 2008 بواسطة Wise اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abu yousra بتاريخ: 28 يناير 2008 تقديم بلاغ مشاركة بتاريخ: 28 يناير 2008 (معدل) جزاك الله خيراً..فعلا أسلوب حلو في الشرح وننتظر المزيد تم تعديل 28 يناير 2008 بواسطة abu yousra اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
nhamzehn بتاريخ: 2 فبراير 2008 تقديم بلاغ مشاركة بتاريخ: 2 فبراير 2008 جزاك الله خيراًأسلوب حلو كثيييير وممتع وبإنتظار المزيد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
King Oracle بتاريخ: 2 فبراير 2008 تقديم بلاغ مشاركة بتاريخ: 2 فبراير 2008 درس جميل جدا اخي محمد , بارك الله بك والى الامام دائما...على فكرة اخي محمد بالنسبة للدروس التي وضعنها بالصوت والصورة (محاضرات )عند الدخول عليها الان تطلب ادخال كلمة السر واسم المستخدم (بيانات الدخول على الايميل ) الرجاااء التكرم باصلاح الخلل . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ashrafgalal بتاريخ: 20 نوفمبر 2008 تقديم بلاغ مشاركة بتاريخ: 20 نوفمبر 2008 جزاك الله خيراااااااااااااااshokran ya Mr Mohamed bas hal fe video enta 3amlo share7 lel cursor???? اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
جود بتاريخ: 27 فبراير 2009 تقديم بلاغ مشاركة بتاريخ: 27 فبراير 2009 thank u so much for nice explain اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sameh bakkar بتاريخ: 27 فبراير 2009 تقديم بلاغ مشاركة بتاريخ: 27 فبراير 2009 تسلم يا محمد ... ننتظر منك المزيد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
tnzeel بتاريخ: 11 يونيو 2014 تقديم بلاغ مشاركة بتاريخ: 11 يونيو 2014 شكرا اخى زادك الله علما الشرح بطريقة مبسطه ومفهومه سلمت يداك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
anas.soft بتاريخ: 16 يونيو 2014 تقديم بلاغ مشاركة بتاريخ: 16 يونيو 2014 جزاك الله خير جزا وجعلة في ميزان حسناتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
a2009mah بتاريخ: 3 أغسطس 2014 تقديم بلاغ مشاركة بتاريخ: 3 أغسطس 2014 يسلمو على الشرح الجميل ....استمر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
predator jaw بتاريخ: 3 سبتمبر 2014 تقديم بلاغ مشاركة بتاريخ: 3 سبتمبر 2014 جزاك الله خيراً ممكن توضيح لو سمحت ref cursor اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.