بتاريخ: 18 أغسطس 201411 سنة comment_253810 السلام عليكم ورحمة الله عندي بروسيجر داخله لوب يقوم بقراءة سجلات من جدول ويقوم بنقلها وإدخالها في جدول آخر. عندما يكون أحد السجلات التي يقرأها اللوب لايمكن إدخاله في الجدول يقف البروسيجر ولا ينتقل للسجل آخر. سؤالي كيف أجعله ينتقل للسجل الذي يليه ويمكل الإدخال حتى لو هناك مشكله في إدخال أحد السجلات المقروءه. مثلاً BEGIN FOR I IN (SELECT * FROM TRM ) LOOP INSERT INTO TEST_INSERT VALUES (I.TRM_NO,I.TRM_DESC); END LOOP; EXCEPTION WHEN OTHERS THEN NULL; END; تم تعديل 24 أغسطس 201411 سنة بواسطة Ahmad.Hasan تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة كاتب الموضوع comment_253826 أشكرك أخ eslam على الرد ولكن لم يتعرف عليها النظام تظهر الرساله next_record must be declated تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة comment_253836 لا مؤاخذة معلش انا افتكرت في الفورمز , بس عموما الي انت عايزه مش واضح بالظبطوفي حاجة عايز اسألك عليها الاولselect * from trm دي حاططها في كرسور ولا لا , لانها طبيعي بتجيب اكتر من ريكورد , وهل الكود بيضرب ايرور معاك ولا لا ؟رد علي الحاجات دي لو سمحت وبعدين نتفاهم ,ولو مش حاطط في كرسور حطها طبعا . تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة comment_253844 من خلال تجربتي انصحك لا تضع أبداً * بل ضع اسم Column ثم ضعهم في جملة Insert وجرب ايش حيحصل معك تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة كاتب الموضوع comment_253845 أنا حاطها جوا لوب ( مش لازم كيرسور). يعني بيتاخذ السجل الأول ثم يدخله في الجدول ثم السجل الآخر وهكذا. وبعدين أنا جربتها من الفورم وماضبطت معايه كمان تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة comment_253858 أنا حاطها جوا لوب ( مش لازم كيرسور). يعني بيتاخذ السجل الأول ثم يدخله في الجدول ثم السجل الآخر وهكذا. وبعدين أنا جربتها من الفورم وماضبطت معايه كمان لا مؤاخذة يا كبير , فاتتني دي , المشكلة كلها انك مش بتقولنا مظبططش ليه , المفروض تشيل الـ exception الي انت حطه ده , وتشوف ايه الايرور الي بيطلع , ساعتها هنعرف ام المشكلة فين ان شاء الله ونحلها باذن الله تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة كاتب الموضوع comment_253865 الأخ eslam أنا أعرف الخطأ إيش وغيش المشكله سؤالي كيف أجعل البروسيجر في حالة وجود خطأ ولم يدخل السجل يتجاهله ويكمل اللوب ويأخذ السجل الآخر. تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة كاتب الموضوع comment_253867 طيب ماهي الطريقه. بإختصار إذا عاوز أنقل 10 سجلات من جدول لآخر وعندما يكون هناك مشكله في سجل يتجاهله وينتقل للسجل الآخر. تقديم بلاغ
بتاريخ: 19 أغسطس 201411 سنة comment_253868 طيب ماهي الطريقه. بإختصار إذا عاوز أنقل 10 سجلات من جدول لآخر وعندما يكون هناك مشكله في سجل يتجاهله وينتقل للسجل الآخر. ما هو ايه المشكلة الي هتقابله بالظبط ؟ لازم نعرفها الاول . يعني مثلا لو مش عارف يدخل الريكورد يعني مثلا لو مش عارف يحفظ عشان في primary key والقيمة هتتكر فيه هتشوف رقم الايرور كام , وتعمل تريجر on-error علي البلوك مثلا وتكتب فيه if error_code = 5555 then next_record ; insert into table values ............ او ممكن تلاقي exception خاص بالموضوع ده تقديم بلاغ
بتاريخ: 20 أغسطس 201411 سنة comment_253882 اخي الكريمحضرتك اعمل الexception داخل بلوك خاص بالانسرت فقطبحيث لما يحدث خطأ فى الانسرت يخرج الى البلوك الرئيسي ويكمل اللوب كالتالي BEGIN FOR I IN (SELECT * FROM TRM ) LOOP begin INSERT INTO TEST_INSERT VALUES (I.TRM_NO,I.TRM_DESC); exception when others then null; end ; END LOOP; END; تقديم بلاغ
بتاريخ: 20 أغسطس 201411 سنة comment_253889 اخي الكريم حضرتك اعمل الexception داخل بلوك خاص بالانسرت فقط بحيث لما يحدث خطأ فى الانسرت يخرج الى البلوك الرئيسي ويكمل اللوب كالتالي BEGIN FOR I IN (SELECT * FROM TRM ) LOOP begin INSERT INTO TEST_INSERT VALUES (I.TRM_NO,I.TRM_DESC); exception when others then null; end ; END LOOP; END; طيب ما هو كده اول ما يقابل الـ EXCEPTION مش هيكمل اللوب انا رأيي , والله اعلم انك تعمل Nested Blocks block تكتب فيه اللوب جوه البلوك الرئيسي , والـ exception جوه البلوك الرئيسي , يقوم لما يظهر الـ exception في اللوب , البلوك يدور علي handler , يقوم ميلقهوش , فيدور عليه في البلوك اللي برة , يقوم يتهندل , ويرجع يكمل اللوب , والله اعلم تقديم بلاغ
بتاريخ: 21 أغسطس 201411 سنة كاتب الموضوع comment_253918 أشكرك ياأخ mohamedali03 كثير الشكر. تقديم بلاغ
بتاريخ: 30 أغسطس 201411 سنة comment_254230 فعلا حل دا هو nested block وانى اعمل ال exception فى ال inner block علشان لو حصل يطلع لل outer block كلام مظبوط جدا تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.