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

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


Amateur

Recommended Posts

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

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

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

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

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

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

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

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

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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