الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

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

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;

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.