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

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

صورة
- - - - -

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


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

#1 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 17 October 2006 - 08:22 PM

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

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 فلم يعطي
لي أي ناتج


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

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#2 jamal_rrkk

jamal_rrkk

    عضو نشط

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

تاريخ المشاركة 29 October 2006 - 11:21 AM

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

أخي الكريم

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


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, 29 October 2006 - 01:05 PM.

قال تعالى :

{ وَمَا خَلَقْتُ الْجِنَّ وَالْإِنسَ إِلَّا لِيَعْبُدُونِ مَا أُرِيدُ مِنْهُم مِّن رِّزْقٍ

وَمَا أُرِيدُ أَن يُطْعِمُونِ إِنَّ اللَّهَ هُوَ الرَّزَّاقُ ذُو الْقُوَّةِ الْمتينُ }

[ الذاريات : 56 : 58 ]


{ وَأْمُرْ أَهْلَكَ بِالصَّلَاةِ وَاصْطَبِرْ عَلَيْهَا لَا نَسْأَلُكَ رِزْقًا

نَحْنُ نَرْزُقُكَ وَالْعَاقِبَةُ لِلتَّقْوَى }

[ طه : 131 ]




سبحان الله والحمد لله والله أكبر


http://tech.groups.y...and_Accounting/

#3 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 29 October 2006 - 01:05 PM

أخي jamal_rrkk العزيز

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


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


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

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



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



فما هو الحل

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#4 jamal_rrkk

jamal_rrkk

    عضو نشط

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

تاريخ المشاركة 29 October 2006 - 04:35 PM

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

 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;

قال تعالى :

{ وَمَا خَلَقْتُ الْجِنَّ وَالْإِنسَ إِلَّا لِيَعْبُدُونِ مَا أُرِيدُ مِنْهُم مِّن رِّزْقٍ

وَمَا أُرِيدُ أَن يُطْعِمُونِ إِنَّ اللَّهَ هُوَ الرَّزَّاقُ ذُو الْقُوَّةِ الْمتينُ }

[ الذاريات : 56 : 58 ]


{ وَأْمُرْ أَهْلَكَ بِالصَّلَاةِ وَاصْطَبِرْ عَلَيْهَا لَا نَسْأَلُكَ رِزْقًا

نَحْنُ نَرْزُقُكَ وَالْعَاقِبَةُ لِلتَّقْوَى }

[ طه : 131 ]




سبحان الله والحمد لله والله أكبر


http://tech.groups.y...and_Accounting/