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

ما الخطأ في هذا الكود


MMA

Recommended Posts

أنظر الي هذا الكود :
--------------------

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 Emp
For Each Row
Declare
--في حالة تكرار رقم الموظف يتم عرض رسالة خاصة--
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 فلم يعطي
لي أي ناتج


فما هو حل هذه المشكلة.

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

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

السلام عليكم ورحمة الله وبركاته

أخي الكريم

يمكن كتابة الكود السابق بهذه الطريقة


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;

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

أخي jamal_rrkk العزيز

تحية طيبة وبعد


أشكرك كثيراً علي الرد


فأنا جربت الكود وأعطي لي نتائج صحيحة عند إدراج سجل جديد ،
ولكن عن إجراء تعديل علي أي سجل يعطي لي الرسالة التالة:

( جدول Management.Emp1 يتغير ، قد لا يشعر به الزناد أو الوظيفة )



مع العلم بأنني قد جربت هذا الكود أكثر من مرة من قبل ولكن
لم يفلح.



فما هو الحل

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

السلام عليكم ورحمة الله وبركاته

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;

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

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

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

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

×   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.

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

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

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