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

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

صورة
- - - - -

سؤال عن حلقتين متداخلتين جاوبوني :(


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

#1 Rallush

Rallush

    عضو

  • الأعضــاء
  • 20 مشاركة

تاريخ المشاركة 16 July 2010 - 09:02 PM

مرحبا ممكن سؤال عاجل لوسمحتو :

عندي حلقتين متداخلتين الأولى عبارة عن cursor يجلب قيم الثانية عبارة عن استعلام select يرجع قيم متعلقة بالقيم التي يتم جلبها من الحلقة السابقة
تحوي هذه الحلقة الثانية عداد, و في حال تم جلب قيمة null من هذا الستعلام أود المتابعة بالقيمة التالية , و لكن الذي حصل هو أنه يتم الخروج من الحلقة بدون المتابعة


loop
fetch cursor into a,b
i:=0;
loop
if (i<3) then
select * from table
where col1=a
and col2=b;
end if;
i:=i+1;
;end loop
end loop;
exception when no_data_found then messag(1 :D


هل يتوجب علي كتابة كود ما في قسم ال exception لجعله يكمل الحلقة و عدم الخروج منها
و شكرا سلف

تم التعديل بواسطة Rallush, 16 July 2010 - 09:03 PM.


#2 mostfa_future

mostfa_future

    عضو مميز

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

تاريخ المشاركة 17 July 2010 - 12:45 AM

اخى الكريم انا مش فهام بذبت كلامك لكن اللى فهمتو انك عندك 2 loop عايز لما جمله السيكلت االلى فى لو ب الداخلى متلاقيش قيمه يكمل لوب مش يخرج والاجراء يخلص لو هوده قصدك يبقى لازم تعمل exception داخال لوب الداخلى مش زاى مانت عامل فى لوب الخارجى . المتال القادم هيكون على hr اول لوب هيكاب القسم و التاى يسرد الموظفين فكرتك ان لو قسم مش موجد فيها موظفين يكمل على القسم التالى مش يقوف ده اللى انا فهمتو الكود اهو لعلا اكون فهمت سولك صح
SET SERVEROUTPUT ON
DECLARE
v_dep varchar2(50);
emp_name varchar2(50);
begin 
for i in (select DISTINCT department_name, department_id from departments)
loop

DBMS_OUTPUT.PUT_LINE(i.department_name);

for k in 1..3
 loop 
 begin
 select last_name into emp_name from employees where department_id=i.department_id and rownum=k ;
 DBMS_OUTPUT.PUT_LINE(emp_name);
 	EXCEPTION 
 when too_many_rows then
 NULL;
 when no_data_found then
 DBMS_OUTPUT.PUT_LINE('end'||' '||i.department_name );
 	END ; 

 end loop;
 end loop ;
 end ;


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

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة