MMA بتاريخ: 17 أكتوبر 2006 تقديم بلاغ مشاركة بتاريخ: 17 أكتوبر 2006 أنظر الي هذا الكود :--------------------Create Table Emp( Enumber Number(10), Ename VarChar2(40), Sex VarChar2(1), Salary Number(10,3), Constraint PK_DEP Primary Key(Enumber))/Create Or Replace Trigger TRG_EMP Before Insert Or Update On EmpFor Each RowDeclare --في حالة تكرار رقم الموظف يتم عرض رسالة خاصة-- Err_Num Exception; Pragma Exception_INIT(Err_Num,-00001);Begin If(Not :New.Salary Between 500 And 5000)Then Raise_Application_Error(-20001,'رجاء إدخال قيمة راتب الموظف ما بين 500 و 5000 جنية مصري'); End If;Exception When(Err_Num)Then Raise_Application_Error(-20000,'لا يجوز تكرار رقم الموظف');End TRG_EMP;/==================================================================================بملاحظة الكود السابق نجد أن هناك جدول خاص بالموظف ، وبه زناد يقوم بحصر ما يلي :1- يقوم بعرض رسالة خاصة تفيد عدم إدخال قيمة الراتب الشهري ما بين 500 و 5000 جنية مصري تحت رقم 20001.2- يقوم بعرض رسالة خاصة تفيد عدم تكرار رقم الموظف تحت رقم 20000.==================================================================================قمت بإستخدام هذا الكود داخل Procedure و أعطي لي نتائج صحيحة ، ولكن عند كتابتةداخل Trigger نفذ خطأ رقم 20001 ، أما بالنسبة للخطأ الثاني رقم 20000 فلم يعطيلي أي ناتجفما هو حل هذه المشكلة. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jamal_rrkk بتاريخ: 29 أكتوبر 2006 تقديم بلاغ مشاركة بتاريخ: 29 أكتوبر 2006 (معدل) السلام عليكم ورحمة الله وبركاتهأخي الكريم يمكن كتابة الكود السابق بهذه الطريقة Create Or Replace Trigger TRG_EMP Before Insert Or Update On Emp2 For Each Row Declare aa number ; Begin select count(Enumber) into aa from emp2 where :new.Enumber = Enumber; If(Not :New.Salary Between 500 And 5000 and aa = 0 )Then Raise_Application_Error(-20001, 'رجاء إدخال قيمة راتب الموظف ما بين 500 و 5000 جنية مصري'); elsif :new.salary between 500 and 5000 and aa >= 1 then Raise_Application_Error(-20000, 'لا يجوز تكرار رقم الموظف'); Elsif (Not :New.Salary Between 500 And 5000 and aa >= 1) Then Raise_Application_Error(-20002,’رقم الموظف مكرر والرتب المدخل غير صحيح’ ); end if ; End; تم تعديل 29 أكتوبر 2006 بواسطة jamal_rrkk اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 29 أكتوبر 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 29 أكتوبر 2006 أخي jamal_rrkk العزيزتحية طيبة وبعدأشكرك كثيراً علي الردفأنا جربت الكود وأعطي لي نتائج صحيحة عند إدراج سجل جديد ، ولكن عن إجراء تعديل علي أي سجل يعطي لي الرسالة التالة:( جدول Management.Emp1 يتغير ، قد لا يشعر به الزناد أو الوظيفة )مع العلم بأنني قد جربت هذا الكود أكثر من مرة من قبل ولكنلم يفلح.فما هو الحل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jamal_rrkk بتاريخ: 29 أكتوبر 2006 تقديم بلاغ مشاركة بتاريخ: 29 أكتوبر 2006 السلام عليكم ورحمة الله وبركاته Create Or Replace Trigger TRG_EMP Before Insert On Emp2 For Each Row Declare aa number ; Begin select count(Enumber) into aa from emp2 where :new.Enumber = Enumber; if inserting then If(Not :New.Salary Between 500 And 5000 and aa = 0 )Then Raise_Application_Error(-20001, 'رجاء إدخال قيمة راتب الموظف ما بين 500 و 5000 جنية مصري'); elsif :new.salary between 500 and 5000 and aa >= 1 then Raise_Application_Error(-20000, 'لا يجوز تكرار رقم الموظف'); Elsif (Not :New.Salary Between 500 And 5000 and aa >= 1) Then Raise_Application_Error(-20002,’رقم الموظف مكرر والرتب المدخل غير صحيح’ ); End if; end if ; End; Create Or Replace Trigger TRG_EMP2 Before Update of salary On Emp2 For Each Row Begin If :new.salary not between 500 and 5000 then Raise_Application_Error(-20002, 'رجاء إدخال قيمة راتب الموظف ما بين 500 و 5000 جنية مصري'); End if; End; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.