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

اين الخطأ في لTrigger التالي


Reda_Inst

Recommended Posts

السلام عليكم و رحمة الله و بركاته
اريد ان اعرف اين الخطا في الكود التالي

CREATE OR REPLACE TRIGGER "EMPLOYEE_T1"


AFTER
update of "DNO" on "EMPLOYEE"
for each row
WHEN (new.dno=1) begin
IF UPDATING AND :OLD.Dno != :NEW.Dno THEN
update employee set salary=salary +(salary * .1) where ssn=:NEW.ssn;
END IF;
end;

المطلوب من الكود السابق ان يضيف 10% علي راتب الموظف الذي يتم تحديث حقل القسم له الي رقم 1

علما ان

dno رقم القسم و ssn رقم الموظف

و جزاكم الله خيرا

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

السلام عليكم
جرب هذا الترجر بعد التعديل:



Create Or Replace Trigger Employee_T1
After Update Of Deptno On Emp
For Each Row
Begin
If (:New.Deptno = 1) Then
 Update Emp 
    Set Sal = Sal + (Sal * 0.1) 
  Where Empno =:Old.Empno;
End If;
End;



قم بتعديله حسب الحقول لديك..

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


السلام عليكم
جرب هذا الترجر بعد التعديل:



Create Or Replace Trigger Employee_T1
After Update Of Deptno On Emp
For Each Row
Begin
If (:New.Deptno = 1) Then
 Update Emp
 Set Sal = Sal + (Sal * 0.1)
  Where Empno =:Old.Empno;
End If;
End;



قم بتعديله حسب الحقول لديك..



للاسف لم ينفذ و ظهرت الرسالة التالية
error ORA-04091: table TEST.EMPLOYEE is mutating, trigger/function may not see it ORA-06512: at "TEST.EMPLOYEE_T1", line 3 ORA-04088: error during execution of trigger 'TEST.EMPLOYEE_T1'


و هذا هو الكود الذي كتبته بعد التعديل

CREATE OR REPLACE TRIGGER "EMPLOYEE_T1"
AFTER update of "DNO" on "EMPLOYEE"
for each row
Begin
If (:New.Dno = 1) Then update employee set salary=salary +(salary * .1)
where ssn=:old.ssn;
END IF;
end; تم تعديل بواسطة Reda_Inst
رابط هذا التعليق
شارك

السلام عليكم
جرب الترجر بعد التعديل:


Create Or Replace Trigger "EMPLOYEE_T1"
After Update Of "DNO" On "EMPLOYEE"
For Each Row
Declare
Pragma Autonomous_Transaction;
Begin
If (:New.Dno = 1) Then 
 Update Employee 
    Set Salary = Salary + (Salary * .1)
  Where Ssn=:Old.Ssn;
  Commit;
End If;
End;

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

و عليكم السلام استاذ احمد
ضهرت الرسالة التالية

error ORA-00060: deadlock detected while waiting for resource ORA-06512: at "TEST.EMPLOYEE_T1", line 5 ORA-04088: error during execution of trigger 'TEST.EMPLOYEE_T1'

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

الأخ الكريم : أتوقع المشكلة في زمن القادح لإن الزمن بعد after لن يتحسس القادح التغيير على الجدول لذلك أختر الزمن before
ويصبح الكود على الجدول employees : (لاداعي لتعليمة update )

CREATE OR REPLACE TRIGGER e2

BEFORE UPDATE

OF DEPARTMENT_ID

ON HR.E2

REFERENCING NEW AS NEW OLD AS OLD

FOR EACH ROW

Begin

If (:New.department_id = 1) Then

:new.salary := :old.salary *1.1 ;

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.

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

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

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