mmsalman87 بتاريخ: 10 ديسمبر 2009 تقديم بلاغ مشاركة بتاريخ: 10 ديسمبر 2009 اخواني عند تنفيذ هذا التريغر البسيط والتافه CREATE OR REPLACE TRIGGER status_terminated_date after UPDATE ON employees FOR EACH ROW BEGIN if :new.status = 2 then update employees set terminated_date =to_char(sysdate,'dd/mm/yyyy') where emp_id=:old.emp_id; end if; END; يشتغل تمام ولكن عند عمل تعديل على قيمة status =2 يعطيني الخطا التالي يعطيني الخطا التالي ORA-04091: table string.string is mutating, trigger/function may not see it Cause: A trigger (or a user defined plsql function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.شو الحل لانو جنني ومن الصبح وانا بلشان فيه اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mmsalman87 بتاريخ: 10 ديسمبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 10 ديسمبر 2009 اخواني طبعا هذا الخطأ يحدث عندما تريد ان تنفذ جمل dml اثناء التواجد في الجدول وهذا لا يجوز وبالتالي يجب التحايل بطرق اخرى على الموضووع انا قمت بتبديل الكود واشتغل تمام وهو كالتالي كي يستفيد الكل منه CREATE OR REPLACE TRIGGER status_terminated_date before UPDATE ON employees FOR EACH ROW BEGIN if :new.status = 2 then :new.terminated_date:=sysdate; end if; END; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 10 ديسمبر 2009 تقديم بلاغ مشاركة بتاريخ: 10 ديسمبر 2009 الأخ / ماهر شكرا لك .. على ايضاح مشكلة ال mutatingاليك مشاركات سابقة بالمنتدى عن هذا الموضوع وملفات مرفقه عن طرق تجنب ال mutating إضغط هنا : Problem In Trigger ... mutating اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mmsalman87 بتاريخ: 11 ديسمبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 11 ديسمبر 2009 الأخ / ماهر شكرا لك .. على ايضاح مشكلة ال mutatingاليك مشاركات سابقة بالمنتدى عن هذا الموضوع وملفات مرفقه عن طرق تجنب ال mutating إضغط هنا : Problem In Trigger ... mutating مشكور اخوي امجد ومنكم نستفيد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.