بتاريخ: 24 ديسمبر 201114 سنة comment_218918 السلام عليكم و رحمة الله و بركاته اريد ان اعرف اين الخطا في الكود التالي 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 رقم الموظف و جزاكم الله خيرا تقديم بلاغ
بتاريخ: 25 ديسمبر 201114 سنة comment_218925 السلام عليكمجرب هذا الترجر بعد التعديل: 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; قم بتعديله حسب الحقول لديك.. تقديم بلاغ
بتاريخ: 25 ديسمبر 201114 سنة كاتب الموضوع comment_218929 السلام عليكمجرب هذا الترجر بعد التعديل: 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 ديسمبر 201114 سنة بواسطة Reda_Inst تقديم بلاغ
بتاريخ: 25 ديسمبر 201114 سنة comment_218937 السلام عليكمجرب الترجر بعد التعديل: 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; تقديم بلاغ
بتاريخ: 25 ديسمبر 201114 سنة كاتب الموضوع comment_218954 و عليكم السلام استاذ احمدضهرت الرسالة التالية 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' تقديم بلاغ
بتاريخ: 28 ديسمبر 201114 سنة comment_219074 الأخ الكريم : أتوقع المشكلة في زمن القادح لإن الزمن بعد 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; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.