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

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

صورة
- - - - -

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


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

#1 Reda_Inst

Reda_Inst

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 24 December 2011 - 11:37 PM

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

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 رقم الموظف

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



#2 Ahmad.Hasan

Ahmad.Hasan

    مشرف قسم الـ Forms & Reports والمشاريع

  • فريق الإشراف
  • 4,871 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Hasan
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle HCM Consultant

تاريخ المشاركة 25 December 2011 - 09:24 AM

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



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;

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

.Oracle E-Business Suite R12 HCM Certified Implementation Specialist

 

.Oracle Fusion Human Capital Management 11g Human Resources Certified Implementation Specialist

 


#3 Reda_Inst

Reda_Inst

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 25 December 2011 - 11:19 AM

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



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, 25 December 2011 - 11:22 AM.


#4 Ahmad.Hasan

Ahmad.Hasan

    مشرف قسم الـ Forms & Reports والمشاريع

  • فريق الإشراف
  • 4,871 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Hasan
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle HCM Consultant

تاريخ المشاركة 25 December 2011 - 12:09 PM

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


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;

.Oracle E-Business Suite R12 HCM Certified Implementation Specialist

 

.Oracle Fusion Human Capital Management 11g Human Resources Certified Implementation Specialist

 


#5 Reda_Inst

Reda_Inst

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 25 December 2011 - 06:50 PM

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

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'



#6 mahmoud kurdy

mahmoud kurdy

    مشترك

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

تاريخ المشاركة 28 December 2011 - 03:56 PM

الأخ الكريم : أتوقع المشكلة في زمن القادح لإن الزمن بعد 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;