mohamed mansour بتاريخ: 27 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 27 ديسمبر 2005 السلام عليكم ورحمة اللهأنا كنت محتاج خبرتكم فى عمل لوب داخل لوب أول لوب بيجيب المرتب للموظف ويقسمه على الف(1000) وبيقربوا لقرب رقم صحيح وبيضعه فى متغير رقم 1 وتانى لوب بياخد قيمة هذا المتغيررقم 1وبيلوب على حسب عدد قيمة المتغير وبيضع فى كل مرة لوب علامه الاستركس فى متغير جديد رقم (2) وفى النهاية انا بدخل قيمة هذا المتغير رقم (2) فى كولم انا مشكلتى انى مش عارف ازاى احدد انهى اى لوب الاول وازاى اخرج من اى لوب هو الكود بيشتغل بس لاول 3 او 4 موظفين لان الكولم فى الجدول مبيقدرش يشيل عدد الاستركس لان المتغيررقم (2) اللى بضع فيه قيمة الاستركس بيحتفظ بالقيم السابقة جواه وبالتالى قيمته بتزيد ومافيش حجم كولم يقدر يحتفظ بيه ومش عارف ازاى اخلى المتغير رقم (2) يمسح القيمه الموجوده فيه قبل ميدخل فى لوب جديدياريت اهل النصيحة يرشدونىانا بشتغل على اسكيمه hr وعامل جدول ذى جدولالموظفين employees اسمه emp ومزود كولم فيه اسمه starsوبدخل فيه عدد الاستركس التى مساوية لقيمة المتغير رقم 2 انا بادى اول لوب 100 حتى 206 لان دى أرقام الموظفين عندىdeclarev_stars emp.stars%type :=null;v_sal emp.salary%type;begin<<outer >> for i in 100..206 loopselect nvl(round(salary/1000),0)into v_sal from emp where employee_id=i;<<inner >> for i in 1..v_sal loopv_stars :=v_stars||'*';end loop inner;update emp set stars=v_starswhere employee_id=i;exit outer;end loop outer;end; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
هانى سند بتاريخ: 27 ديسمبر 2005 تقديم بلاغ مشاركة بتاريخ: 27 ديسمبر 2005 (معدل) السلام عليكم هذا هو الكود لعمل ما تريد DECLARE CURSOR emp_cur IS SELECT * FROM emp; v_stars emp.stars%TYPE := NULL; v_sal emp.salary%TYPE; BEGIN FOR i IN emp_cur LOOP SELECT NVL (ROUND (salary / 1000), 0) INTO v_sal FROM emp WHERE employee_id = i.employee_id; FOR i IN 1 .. v_sal LOOP v_stars := v_stars || '*'; END LOOP; UPDATE emp SET stars = v_stars WHERE employee_id = i.employee_id; v_stars := NULL; END LOOP; END; و التعديلات هي اولا عمل كيرسور يجيب كل الموظفين و عمل اللوب به و عندما ينتهي من كل الموظفين سيخرج من اللو ب بمفرد ولا داعي لتحديدي عدد مرات معينة او الخروج من اللوب عن طريق كلمة EXITثانيا بعد ان تقوم بعمل جملة الابديت يكفي ان تقوم فقط بكتابة الجملة التالية V_STARS:=NULL; حتي يفرغ من قيمته و يستقبل القيمة الجديدة و تستطيع الحصول علي نتأئج صحيحة و عمل جملة الابديت بشكل صحيح ملحوظة اخيرة إسمها استرسك و ليست استركس بالتوفيق تم تعديل 27 ديسمبر 2005 بواسطة hanon_OCP اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mohamed mansour بتاريخ: 27 ديسمبر 2005 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 27 ديسمبر 2005 جزاك الله خيرأنا متشكر جدا على مساعدتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.