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

Triger يغني عن الـSequance


الأسيف

Recommended Posts

لأن الـSequance غير آمن وممكن أن يتعرض للحذف ..
إليكم هذا الـ Triger الذي أفادنا به أحد الخبراء ..والذي سياعدنا كثيراً في الترقيم التلقائي بطريقة مريحة وآمنة ..وطبعا يكتب قبل عملية الإضافة ..
ومثالنا هنا على جدول الطلاب ..

create triger student-s-no
before insert on student 
declare
x number;
begin select max(s.no)+1 into x from stydent; :new.s-no:=nvl(x,1);
end;


آمل أن تجربوه ..

تم تعديل بواسطة الأسيف
رابط هذا التعليق
شارك

هلا اخي الاسيف
هذا التريجر لن يعمل لانه سوف يؤدي الي تايبول مايوتيتنج
اي انك تقوم بعمل سلكت من جدول يتم الانسرت عليه
وهذا الحل لتفادي السكونس لانه غالبا ما ينتج جاب في الارقام
ولا بد من التعامل به مثلا عند اصدرا ايصالات مرقمه
الحل لتلك المشكله هي عمل كود كنترول تايبول
تايبول عادي جدا يتم تخزين اخر رقم سيريال موجود عليه
و عند عمل سلكت عليه نكتب في نهايتها for update
وهذا يعني عمل lock لريكورد الذي نقوم بقرائته
ثم بعد السلكت نقوم بعمل ابديت للقيمه في الجدول الخارجي باضافة 1
هذه هي الطريقة الصحيحه للتعامل بعيدا عن السيكونس
لانها تعني اما العملية كلها commit او العمليه كلها ROLLBACK
شكرا لك اخي مع تمنياتي بالتوفيق

رابط هذا التعليق
شارك

مفيش مايمنع ان الكود يشتغل فى التريجر pre-insert الكود شغال تمام ومفيهوش مشكلة
الفكرة التانية انى انشي جدول احط فيه اعلى قيمة واستعلم منه حل آخر بس الحل الأول مفيهوش مشكلة ممكن التوضيح ؟؟؟؟؟؟؟؟؟؟

رابط هذا التعليق
شارك

التوضيح كما يقصده الاخ بلاك اند وايت ان سمح لي بان اوضح وجهة نظره ان هذا الكود المفروض ان يكتب
علي داتابيز تريجر كما قال الاخ الاسيف و هذا واضح من شكل التريجر و هو ليس في الفورم
و ان حدث ذلك فسينتج الايرورر الذي تفضل الاخ بلاك اند وايت بشرحه
لانه لا يجوز ان نعمل استعلام من جدول يحدث فيه ابديت او انسرت
و ملاحظتك صحيحة ora maseter
اذ ان يكمن استعمال الكود علي الفورم بدون مشاكل
تحت تريجر بري انسرت علي مستوي البلوك
اما علي الداتابيز تريجر before insert فسينتج الايرور
اتمني ان تصحح لي اخ بلاك اند وايت ان كنت مخطئ في فهمك
و الله الموفق

رابط هذا التعليق
شارك

يعني النتيجة النهائية لها النقاش الحلو .. :D
أن الترتيجر صحيح على الفورم .....
إذا هل نعتمده ........ :)

رابط هذا التعليق
شارك

والله تفاعل جميل
اذا كان سيعتمد كما يقول الاخ الاسيف :)
فيجب كتابته كالتالي

begin Select nvl( max(empno ),0) +1
     Into :empno From emp ;
 End  ;


و هذا علي تريجر pre-insert
وعلي جدول emp

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

مشكور أخ TAREK وماقصرت على التوضيح ومعليش جل من لاينسى ...
كنت أريد أسئلة الديفلوبر 6i و 9i ومعليش مرة ثانية ... وياليت تخدم أخوك oil بالسلف تست. والله يعطيك العافية مقدماً. :angry: ;)

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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