الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

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

عندي حلقتين متداخلتين الأولى عبارة عن 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

بتاريخ:

اخى الكريم انا مش فهام بذبت كلامك لكن اللى فهمتو انك عندك 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 ويكمل لوب عادى من غير ما يخرج منها . ارجو ان يكون فهمى لسولك صحيح .
و بالتوفيق لجميع.

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.