Reda_Inst بتاريخ: 24 ديسمبر 2011 تقديم بلاغ مشاركة بتاريخ: 24 ديسمبر 2011 السلام عليكم و رحمة الله و بركاته اريد ان اعرف اين الخطا في الكود التالي CREATE OR REPLACE TRIGGER "EMPLOYEE_T1" AFTERupdate 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 رقم الموظف و جزاكم الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 25 ديسمبر 2011 تقديم بلاغ مشاركة بتاريخ: 25 ديسمبر 2011 السلام عليكمجرب هذا الترجر بعد التعديل: 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; قم بتعديله حسب الحقول لديك.. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Reda_Inst بتاريخ: 25 ديسمبر 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 ديسمبر 2011 (معدل) السلام عليكمجرب هذا الترجر بعد التعديل: 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 rowBeginIf (:New.Dno = 1) Then update employee set salary=salary +(salary * .1)where ssn=:old.ssn;END IF;end; تم تعديل 25 ديسمبر 2011 بواسطة Reda_Inst اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 25 ديسمبر 2011 تقديم بلاغ مشاركة بتاريخ: 25 ديسمبر 2011 السلام عليكمجرب الترجر بعد التعديل: 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; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Reda_Inst بتاريخ: 25 ديسمبر 2011 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 ديسمبر 2011 و عليكم السلام استاذ احمدضهرت الرسالة التالية 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' اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mahmoud kurdy بتاريخ: 28 ديسمبر 2011 تقديم بلاغ مشاركة بتاريخ: 28 ديسمبر 2011 الأخ الكريم : أتوقع المشكلة في زمن القادح لإن الزمن بعد 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; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.