بتاريخ: 28 أبريل 200916 سنة comment_155145 السلام عليكمأحبتي لدينا برنامج نعمل عليه به جدول K1 وعمود SERIAL_NOعمود الرقم يتم إدخاله من قبل المستخدم يدوياولكن المشكلة عند حذف سجل معين فإننا نحتاج لإعادة ترقيم السجلات من جديد مثلا لو كان لدينا1-أحمد2-محمد3-حسن4-أمجد5-مصطفىوقمنا بحذف الرقم 3 فسيكون الترتيب 1-أحمد2-محمد4-أمجد5-مصطفىكيف الحل وأين يتم وضع الكود المناسب في ترايقر العمود أم الجدول تقديم بلاغ
بتاريخ: 28 أبريل 200916 سنة comment_155147 الاخ الكريم السلام عليكم ورحمة الله وبركاتههذا موضوع المفروض في منتدى ال pl sql أليس كذلكفرضا عندي جدول كالاتي create table ss (id number(8), name varchar2(60)); ثم نقوم بعملية الادخال هكذا insert into ss values (1,'ahmed'); insert into ss values (3,'ali'); insert into ss values (22,'mustafa'); commit; الان عمود ال id به قيم غير مرتبة كالاتي 1-3-22 وهكذا المفروض يكون القيم كالاتي 1-2-3 وهكذاقم بعمل هذا الكيرسور سيقوم بإعادة ترتيب البيانات Declare Cursor C1 is select id from ss for update of ss.id; v_id number :=0; x number; Begin Open C1; select count (*) into x from ss; for i in 1.. x loop Fetch C1 into v_id; update ss set id =i where current of c1; Exit when C1%notfound; End loop; Close C1; End; / قم بعمل الاتي select * from ss; ولكن أعتقد أنها مرهقة جدا للسيرفر هذا وماذا إذا كان عمود id مفتاح أساسي أعتقد سيكون تنفيذها أصعب وأصعبولكن جرب هذا الحل تقديم بلاغ
بتاريخ: 28 أبريل 200916 سنة comment_155154 السلام عليكماخي الحبيب...هذا حل مشكلتك...اكتب هذا الكود على ترجر POST-DELETE declare cursor c is select P_NO from PART_SERVC where P_NO>:BLK1.P_NO for update; begin for i in c loop update PART_SERVC set P_NO=i.P_NO-1 where current of c; end loop; end; وعدل على الكود حسب متطلبات البرنامج عندك بالتوفيق تقديم بلاغ
بتاريخ: 28 أبريل 200916 سنة comment_155169 الحقية أخي paloracle قمت بتجربة الكود ولكن لم يقم بإعادة ترتيب الارقام بينما ماشاركت به يقوم بإعادة الترتيب وإن كنت أرى أن الفكرة أساسا ستكون صعبة التحقيق مع الجداول ذات العدد الهائل من السجلات تقديم بلاغ
بتاريخ: 28 أبريل 200916 سنة comment_155173 السلام عليكم اعتقد ان الصعوبه ... عندما يكون هذا العمود هو مفتاح اساسى primary key فى الجدول الرئيسي ويكون مرتبط ومستخدم فى جداول اخرى فى النظام foreign key فيجب عندما تغير قيمة مفتاح الجدول فى الجدول الرئيسى ان تغيرها ايضا فى العمود المقابل فى الجداول المرتبطه كيف يمكن حل هذا الموضوع ؟ ومن المؤكد أنه يوجد حل للتعامل مع اسلوب تغيير قيمة المفتاح الرئيسى PK وتغييرها ايضا فى المفتاح الاجنبي FK .... فى نفس الوقت .... تقديم بلاغ
بتاريخ: 28 أبريل 200916 سنة comment_155174 هي فعلا صعبة أصلا في تنفيذها وأعتقد أنه يوجد لها بدائل غير هذا الحل أعتقد أن هذا الموضوع متعلق بمنتدى النماذج يرجى من الاخوة المشرفين نقله إلى هنااااك تم تعديل 28 أبريل 200916 سنة بواسطة mustafagamiel تقديم بلاغ
بتاريخ: 29 أبريل 200916 سنة comment_155194 انا مع رأي جميع الاخوة اللي ردوا قابلي انها عملية مرهقة جدا للسيرفروالمشكلة الاكبر لو كان فيه FORIGN KEY مرتبط بيهافترح انك تعمل فلاج (FLAG) ويكون عبارة عن حالة الكولم 1 = نشط أو موجود ، 2= محذوف او غير نشط تقديم بلاغ
بتاريخ: 29 أبريل 200916 سنة comment_155288 السلام عليكماخي الحبيب..قم بكتابة هذا الكود داخل ترجر PRE-INSERT على مستوى البلوك BEGIN SELECT MAX(NVL(P_NO,0)+1) INTO :BLK1.P_NO FROM PART_SERVC; EXCEPTION WHEN OTHERS THEN :BLK1.P_NO:=1; END; IF NVL(:BLK1.P_NO,0)=0 THEN :BLK1.P_NO:=1; END IF; وهذا الكود داخل ترجر POST-DELETE كمان على مستوى البلوك declare cursor c is select P_NO from PART_SERVC where P_NO>:BLK1.P_NO for update; begin for i in c loop update PART_SERVC set P_NO=i.P_NO-1 where current of c; end loop; end; بالتوفيق تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.