بتاريخ: 17 أكتوبر 200619 سنة comment_80975 أنظر الي هذا الكود :--------------------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 فلم يعطيلي أي ناتجفما هو حل هذه المشكلة. تقديم بلاغ
بتاريخ: 29 أكتوبر 200619 سنة comment_81628 السلام عليكم ورحمة الله وبركاتهأخي الكريم يمكن كتابة الكود السابق بهذه الطريقة 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 أكتوبر 200619 سنة بواسطة jamal_rrkk تقديم بلاغ
بتاريخ: 29 أكتوبر 200619 سنة كاتب الموضوع comment_81642 أخي jamal_rrkk العزيزتحية طيبة وبعدأشكرك كثيراً علي الردفأنا جربت الكود وأعطي لي نتائج صحيحة عند إدراج سجل جديد ، ولكن عن إجراء تعديل علي أي سجل يعطي لي الرسالة التالة:( جدول Management.Emp1 يتغير ، قد لا يشعر به الزناد أو الوظيفة )مع العلم بأنني قد جربت هذا الكود أكثر من مرة من قبل ولكنلم يفلح.فما هو الحل تقديم بلاغ
بتاريخ: 29 أكتوبر 200619 سنة comment_81677 السلام عليكم ورحمة الله وبركاته 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; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.