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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

سوال فى 2 Cursor متداخلين


2 رد (ردود) على هذا الموضوع

#1 amr fawzy

amr fawzy

    مشترك

  • الأعضــاء
  • 132 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 February 2008 - 12:43 PM

السلام عليكم ورحمه الله وبركاته
انا عندى جدولين الجدول الاول فيه حقلين رقم الاسبوع وقيمه الاسبوع والجدول الثانى فيه حقلين رقم الصنف واحتياطى الصنف
اريد ان اعمل كود يقوم بعمليه ضرب لكل قيمه اسبوع على حدى مع كل قيم الاحتياطى لكل صنف فى الجدول الثانى ناتج هذه العمليه يوضع فى جدول اخر يعنى اقصد ان قيمه الاسبوع فى الصف الاول تضرب فى كل قيم الاحتياطى فى كل الصفوف اللى فى الجدول الثانى ثم قيمه الاسبوع اللى فى الصف الثانى وهكذا حتى اخر صف فى الجدول

انا عملت الكود الاتى ولكن الناتج غير صحيح
[codebox]open weeks_cur;
loop
fetch weeks_cur into weekord,valueofweek;
open material_cur;
loop
fetch material_cur into MATERIALID,extra;
VAL:=valueofweek*extra
insert into TABLE3
values (weekord, MATERIALID,VAL);
commit;
exit when material_cur %notfound;
end loop;
close material_cur;
exit when weeks_cur %notfound;
end loop;
close weeks_cur;
end;[/codebox]

#2 Om MAriam

Om MAriam

    عضو نشط

  • الأعضــاء
  • 297 مشاركة
  • الاسم الأول:Nesrine
  • اسم العائلة:Ibrahim
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle consultant

تاريخ المشاركة 12 February 2008 - 09:20 AM

فى هذه الحالة يستحن استخدام for loop
والsyntex الخص بها كالآتي:
for I in cursor_name loop
your statement;
end loop;


for i inweeks_cur loop -- loop1
for j in material_cur
VAL:=valueofweek*extra
insert into TABLE3 values (weekord,MATERIALID,VAL);
commit;
end loop; -- end loop 2
end loop; -- end loop 1

استبدل المتغيرات الخاص بالكرسور ب i.column_name او j.i.column_name على حسب الكرسور
و column_name هوو اسم الحقل الذي يتم الختياره فى جملة الكرسور

weekord = i.coulmn1
valueofweek = i.column2

materialid =j.column1
extra = j.column2

-- ممكن بدل ماتعرف الكرسور فى decalre تعرفها مباشرة فى جملة for loop مثال:
for i in (select sal
from emp
where deptno = 30) loop
update emp
set sal = i.sal*1.10;
end loop;
commit;

#3 amr fawzy

amr fawzy

    مشترك

  • الأعضــاء
  • 132 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 12 February 2008 - 03:31 PM

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

تم التعديل بواسطة amr fawzy, 12 February 2008 - 03:39 PM.