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

مشكلة إعادة ترقيم السجلات

Featured Replies

بتاريخ:

السلام عليكم
أحبتي لدينا برنامج نعمل عليه به جدول K1 وعمود SERIAL_NO
عمود الرقم يتم إدخاله من قبل المستخدم يدويا
ولكن المشكلة عند حذف سجل معين فإننا نحتاج لإعادة ترقيم السجلات من جديد مثلا لو كان لدينا
1-أحمد
2-محمد
3-حسن
4-أمجد
5-مصطفى
وقمنا بحذف الرقم 3 فسيكون الترتيب
1-أحمد
2-محمد
4-أمجد
5-مصطفى
كيف الحل وأين يتم وضع الكود المناسب في ترايقر العمود أم الجدول

بتاريخ:

الاخ الكريم السلام عليكم ورحمة الله وبركاته
هذا موضوع المفروض في منتدى ال 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 مفتاح أساسي
أعتقد سيكون تنفيذها أصعب وأصعب
ولكن جرب هذا الحل

بتاريخ:

السلام عليكم
اخي الحبيب...هذا حل مشكلتك...
اكتب هذا الكود على ترجر 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;



وعدل على الكود حسب متطلبات البرنامج عندك
بالتوفيق

بتاريخ:

الحقية أخي paloracle قمت بتجربة الكود ولكن لم يقم بإعادة ترتيب الارقام
بينما ماشاركت به يقوم بإعادة الترتيب

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

بتاريخ:

السلام عليكم

اعتقد ان الصعوبه ... عندما يكون هذا العمود هو مفتاح اساسى primary key فى الجدول الرئيسي ويكون مرتبط ومستخدم فى جداول اخرى فى النظام foreign key

فيجب عندما تغير قيمة مفتاح الجدول فى الجدول الرئيسى ان تغيرها ايضا فى العمود المقابل فى الجداول المرتبطه

كيف يمكن حل هذا الموضوع ؟ ومن المؤكد أنه يوجد حل للتعامل مع اسلوب تغيير قيمة المفتاح الرئيسى PK وتغييرها ايضا فى المفتاح الاجنبي FK .... فى نفس الوقت ....

بتاريخ:

هي فعلا صعبة أصلا في تنفيذها وأعتقد أنه يوجد لها بدائل غير هذا الحل

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

تم تعديل بواسطة mustafagamiel

بتاريخ:

انا مع رأي جميع الاخوة اللي ردوا قابلي انها عملية مرهقة جدا للسيرفر
والمشكلة الاكبر لو كان فيه FORIGN KEY مرتبط بيه

افترح انك تعمل فلاج (FLAG) ويكون عبارة عن حالة الكولم 1 = نشط أو موجود ، 2= محذوف او غير نشط

بتاريخ:

السلام عليكم
اخي الحبيب..قم بكتابة هذا الكود داخل ترجر 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;



بالتوفيق

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

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

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

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

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

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.