الانتقال إلى المحتوى
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.

مساعدة في عمل For

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته

أخواني الاعزاء

ممكن احد يقدر يساعدني في تصحيح هذا لكود

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

رمز المهمة ورقمها يقوم المستخدم بادخالها من الفورم ويضغط على زر اضافة حيث يكون تحت هذا الزر ما يلي:

في البداية يستعلم عن رمز المهمة ورقمها في كل قسم ان لم تكون موجودة فيكون هناك استثناء يقوم بادخال القسم ورمز المهمة ورقمها والتاريخ الحالي لجميع الاقسام.

الكود التالي عملته لكنه غير صحيح هل من الممكن تصحيحه

declare
cursor c1 is select distinct(dept) from policy_dept;
x c1%rowtype;
g varchar2(3);
i number;
begin
   for x in c1
     loop
         begin
              select grp_id, itm_id into g, i from policy_dept
                    where itm_id  = :itm_id
                    and grp_id = :grp_id
                    and dept = x;
              exception
              when no_data_found then
                   insert into policy_dept
                   values(x,:grp_id,:itm_id,sysdate);
        end;
   end loop;
commit;
end;



شاكرا لكم مسبقا

بتاريخ:

اخي الكريم
هذا التعديل جربة وخبرنا عن النتائج

declare
cursor c1 is 
   select distinct(dept) dept from policy_dept;
cursor c2 is
      select grp_id, itm_id from policy_dept
                   where itm_id  = :itm_id
                   and grp_id = :grp_id
                   and dept = x.dept;
--x c1%rowtype;
g varchar2(3);
i number;
open c2;
begin
  for x in c1
    loop
        begin
                fetch c2 into g,i;
       if g is null and i is null then
           begin
                  insert into policy_dept
                  values(x.dept,:grp_id,:itm_id,sysdate);
                    EXCEPTION
     WHEN OTHERS THEN
                        DECLARE
       server_err               NUMBER         := abs(DBMS_ERROR_CODE);
      server_msg               VARCHAR2(2000) := DBMS_ERROR_TEXT;
   
         BEGIN
 	rollback;
 	message('خطأ'||to_char(server_err) ||'-'||server_msg);
 	
   end;     
 end;
  end if;

       end;
  end loop;
commit;
end;

بتاريخ:
  • كاتب الموضوع

شكرا لك عزيزي على التجاوب لكن

عندما عملت استعلام في الكيرسر الثاني وقلت ان

cursor c2 is
select grp_id, itm_id from policy_dept
where itm_id = :itm_id
and grp_id = :grp_id
and dept = x.dept;


الـ x غير معرفة

بتاريخ:
  • كاتب الموضوع

الله يعطيك العافية وتسلم يدينك ياعزيزي

عدلت الخطأ السابق وقمت بوضع OPEN CURSOR في منطقة BEGIN ..

بصراحة شكرا لك الف مرة

طيب انا سبق وان عملت شيء مشابه يقوم بالاضافة لاكثر من ITM_ID وشغال صحيح لكن أردت أن أدمجه مع اللذي عدلت عليه هل من الممكن ذلك لان الجديد يضيف مهمة واحدة فقط والسابق يضيف مهمات مثلا من 1 الى 46 لكن لا بد ان تقوم بتحديد قسم هل من الممكن دمج الاثنين معا وساكون شاكرا وممتنا لك ياعزيزي

declare
x number;
begin
    for i in :from_itm .. :to_itm
        loop
            begin
                 select itm_id into x from policy_dept
                        where dept = :dep
                          and grp_id = :grp_id
                          and itm_id = i;
                 exception
                 when no_data_found then
                      insert into policy_dept
                             values(:dep,:grp_id,i,sysdate);
                     -- message(i);
                 end;
        end loop;
commit;
end;



الثاني

declare
cursor c1 is 
  select distinct(dept) dept from policy_dept;

x c1%rowtype;

cursor c2 is
     select grp_id, itm_id from policy_dept
                  where itm_id  = :itm_id
                  and grp_id = :grp_id
                  and dept = x.dept;
g varchar2(3);
i number;
begin
open c2;
 for x in c1
   loop
       begin
               fetch c2 into g,i;
      if g is null and i is null then
          begin
                 insert into policy_dept
                 values(x.dept,:grp_id,:itm_id,sysdate);
          EXCEPTION
          WHEN OTHERS THEN
          DECLARE
            server_err     NUMBER         := abs(DBMS_ERROR_CODE);
            server_msg     VARCHAR2(2000) := DBMS_ERROR_TEXT;

          BEGIN
            rollback;
            message('ÎØÃ'||to_char(server_err) ||'-'||server_msg);
  
          end;     
          end;
      end if;

      end;
 end loop;
commit;
end;


الثاني هذا بعد التعديل البسيط عليه

والف شكر لك ياعزيزي Admin05

بتاريخ:

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

declare
cursor c1 is 
 select distinct(dept) dept from policy_dept;

x c1%rowtype;

cursor c2(j number) is
    select grp_id, itm_id from policy_dept
                 where itm_id  = j
                 and grp_id = :grp_id
                 and dept = x.dept;
g varchar2(3);
i number;
begin


for zz in :from_itm .. :to_itm
       loop
           begin
open c2(zz);
for x in c1
  loop
      begin
              fetch c2 into g,i;
     if g is null and i is null then
         begin
                insert into policy_dept
                values(x.dept,:grp_id,zz,sysdate);
         EXCEPTION
         WHEN OTHERS THEN
         DECLARE
           server_err     NUMBER         := abs(DBMS_ERROR_CODE);
           server_msg     VARCHAR2(2000) := DBMS_ERROR_TEXT;

         BEGIN
           rollback;
           message('ÎØÃ'||to_char(server_err) ||'-'||server_msg);
 
         end;     
         end;
     end if;

     end;
end loop;
close c2;
end;
end loop;
commit;
end;



هنا تم اضافة loop اخر يقوم بالعد مثلا من 1 الى 46 وحسب رقم الايتم المهم ان البحث يتم حسب رقم العميل ويتم فتح ال cursour c2 واغلاقه بعدد الايتم ونكمل العملية بشكل طبيعي
ارجو ان يكون هذا الدمج هو الشكل الصحيح الذي تريد

بتاريخ:
  • كاتب الموضوع

نأسف على الإزعاااج...
نأسف على الإزعاااج...
نأسف على الإزعاااج...

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

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

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

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

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

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.