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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

how i can get & fill sequence gap ?


9 رد (ردود) على هذا الموضوع

#1 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 28 March 2004 - 08:03 AM

السلام عليكم أحبائى أعضاء المنتدى
يحدث أحيانا خطاء فى عمل sequence مثلا أن نفقد أرقام منه
فى حالة فقدان لارقام معينة
مثلا عندى sequence مرتبط بحقل رقم الموظف فى جدول الموظفين
وهذا الحقل ياخذ قيمتة من هذا ال sequence عن طريق تريجر
بعد الاطلاع على جدول الموظفين وجدت الارقام التالية لم تسجل
(5,8,11 ) , والباقى مسجل بداية من (1 حتى 60 )

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

فهل يوجد طريقة لعلاج هذا الخطاء مثل function أو Procedure ?
وشكرا

#2 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 29 March 2004 - 04:48 AM

يا شباب يعنى مفيش حد تجاوب مفيش أى تفاعل ليه كده

#3 محمد

محمد

    عضو

  • الأعضــاء
  • 24 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 30 March 2004 - 05:05 PM

السلام عليكم

لقد واجهت هذه المشلكة في برنامج سابق ، ووجد أن هناك طريقتين لحلها ، ولكن الكود غير موجود معي ولا يحضرني الآن ، ولكن ممكن أعطيك الفكرة وتحاول توجدها.
أول حل أنك تعمل عملية مقارنة بين كل رقمين متجاورين ، بحيث تسأل (هل الرقم التالي = الرقم الحالي + 1) إذا " نعم " تجاوز الرقم وخذ الرقم التالي واللذ يليه .. وهكذا حتى تجد جواب " لا " لسؤالك ، عندها تضع الرقم المفقود للسجل المراد إضافته.

أما الطريقة الثانية فهي أن تجعل إمكانية للمستخدم أن يكتب الرقم الذي يرغب فيه ويمكن بهذه الطريقة أنه يكتشف الرقم المفقود ويضيفه .. ببس مساوئها أن المستخدم ممكن يسجل أرقام متفاوتة وبرتقيمه الخاص ، وقد تكون بشكل عشوائي.


أرجو أن تكون الصورة واضحة .. ولكم الشكر

#4 John

John

    عضو نشط

  • الأعضــاء
  • 387 مشاركة

تاريخ المشاركة 30 March 2004 - 05:17 PM

ممكن علشان تحل المشكلة من أولها انك ماتستخدمش الـ sequence ممكن تستخدم دالى MAX اى ترى ماهى اكبر قيمة و تضيف واحد اليها

Declare

VarMax number ;

Begin Select empno

into varmax from emp :empno := VarMax + 1

end;


انا أستخدمتها بس عملت معايا شوية مشاكل برضة ;)
جربها و قولى

تم التعديل بواسطة John, 30 March 2004 - 05:20 PM.

Johnwahba2002@hotmail.com

#5 ahm3000

ahm3000

    عضو

  • الأعضــاء
  • 4 مشاركة

تاريخ المشاركة 30 March 2004 - 05:40 PM

تعقيب على كلام الأخ jone أفضل في الفورم تكتب

declare
x number;
begin
select nvl (max(empno),1)+1 into x from emp;
end;
عشان إذا كان فاضي nullيكتب واحد

#6 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 31 March 2004 - 05:38 AM

السلام عليكم أخوانى الاعزاء
والله تواصل رائع وجميل من الاخوة الاعضاء
شكرا لكم أخوانى محمد . ahm3000 . JOHN

اما بخصوص أفضل طريقة فى نظرى لاستخدام SEQUENCES فى الفورم فهى
كالتالى
نفترض الاتى
1- عملنا BLOCK للجدول S_ORD
2- عندك SEQUENCE مسمى S_ORD_ID
الان حقل الرقم (ID) الموجود فى الجدول S_ORD نريده ان ياخذ قيمة من
ال SEQUENCE المسمى (S_ORD_ID)

نروح على الفورم بتعتنا وبعدين نروح على البلوك بتعنا ونعمل الاتى
TRIGGER ----> PRE-INSERT
ونكتب الاتى داخله
SELECT S_ORD_ID.NEXTVAL INTO :S_ORD.ID FROM DUAL ;

الشرح
------
وظيفة هذا التريجر هى
قبل القيام باى عملية لادخال البيانات فى جدول الطلبيات يقوم التريجر باضافة رقم الطلبية
من ال SEQUENCE بدون تدخل منا وبالتالى فلن يتم أضافة اى طلبية من غير ان تكون لها رقم وبالتالى لا يحدث ان نفقد أرقام من ال SEQUENCE

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

#7 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 31 March 2004 - 06:00 AM

السلا م عليكم
مرفق ملف به
الفورم
و ال SEQUENCE + TABLE
للاعضاء الذى ليس لديهم
جدول S_ORD و SEQUENCE S_ORD_ID

ملفات مرفقة

  • ملف مرفق  SEQUENCE.zip   10.88كيلو   277 عدد مرات التحميل


#8 braveheart

braveheart

    عضو

  • الأعضــاء
  • 23 مشاركة

تاريخ المشاركة 31 March 2004 - 09:10 AM

بارك الله فيك على هذه الإجابة الشافية

#9 Oramaster

Oramaster

    مشترك

  • الأعضــاء
  • 112 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 April 2004 - 08:25 AM

اى سلكت او دخول على الnext val لل sequence اكيد بتعمل زيادة لقيمته واضح انك كنت عاملها فى الأول على when new record عشان كده كنت بتفقد بعض الأرقام وتحصل الجاب اللى كنت بتحكى عليها لكن عند وضعها فى الpre insert اتحلت المشكلة او عن طريق كود على نفس التريجر ب select max بس فى جاب حتحصل برضه لما تحذف بعض السجلات من الجدول ومش حيبقى ابدا مترقم سيريال
إنّ الحَمدَ لله نَحمُدهُ ونستعينهُ ونستغفرهُ ونتوبُ إليه ونعوذُ بالله من شرور أنفسنا ومن سيئات أعمالنا من يهده الله فلا مضل له ومن يضلل فلا هادي له وأشهد إن لا إله إلا الله وحده لا شريك له وأشهد أن محمدا عبده ورسوله

#10 TAREK ALHAMAD

TAREK ALHAMAD

    مشترك

  • الأعضــاء
  • 109 مشاركة

تاريخ المشاركة 01 April 2004 - 06:15 PM

الاخت Oramaster كلامك صحيح وهو ده اللى انا عملت من البداية
وسؤالى هو
عن كيفية عمل (procedure او function )
لاستخراج الجاب ان وجد فى اى sequence
وليس طريقة عمل ال sequence
ولكنى أحببت ان أوضح طريقة عمل ال sequence على الفورم للاخوة الاعضاء
حتى لا يقع أحد فى هذا الخطاء
فارجو الافادة أذا كان عندك حل لمعالجة sequence gap