بتاريخ: 3 أبريل 200619 سنة comment_65152 السلام عليكم ورحمة الله وبركاتهأخواني الاعزاء ممكن احد يقدر يساعدني في تصحيح هذا لكودأريد ان ادخل بيانات على جدول على اساس ان ياخذ رقم القسم ويضيف له مهمة جديدة علما ان القسم كل قسم يحتوي على عدة مهامرمز المهمة ورقمها يقوم المستخدم بادخالها من الفورم ويضغط على زر اضافة حيث يكون تحت هذا الزر ما يلي:في البداية يستعلم عن رمز المهمة ورقمها في كل قسم ان لم تكون موجودة فيكون هناك استثناء يقوم بادخال القسم ورمز المهمة ورقمها والتاريخ الحالي لجميع الاقسام.الكود التالي عملته لكنه غير صحيح هل من الممكن تصحيحه 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; شاكرا لكم مسبقا تقديم بلاغ
بتاريخ: 3 أبريل 200619 سنة comment_65226 اخي الكريم هذا التعديل جربة وخبرنا عن النتائج 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; تقديم بلاغ
بتاريخ: 4 أبريل 200619 سنة كاتب الموضوع comment_65278 شكرا لك عزيزي على التجاوب لكنعندما عملت استعلام في الكيرسر الثاني وقلت ان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 غير معرفة تقديم بلاغ
بتاريخ: 4 أبريل 200619 سنة كاتب الموضوع comment_65280 الله يعطيك العافية وتسلم يدينك ياعزيزيعدلت الخطأ السابق وقمت بوضع 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 تقديم بلاغ
بتاريخ: 4 أبريل 200619 سنة comment_65289 اخي الكريمممكن تعديل القيم بحيث يقوم بعمل هذه العملية اكثر من مرة كالتاليوبصراحة انا اقدر الناس اللي مثلك كثير من الناس لايتعب نفسه بالحل فقط يريد الحل جاهز على طبق من ذهب 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 واغلاقه بعدد الايتم ونكمل العملية بشكل طبيعيارجو ان يكون هذا الدمج هو الشكل الصحيح الذي تريد تقديم بلاغ
بتاريخ: 5 أبريل 200619 سنة كاتب الموضوع comment_65448 نأسف على الإزعاااج... نأسف على الإزعاااج... نأسف على الإزعاااج... تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.