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

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

صورة
- - - - -

Problem In Trigger ... mutating


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

#1 mido_develper

mido_develper

    عضو نشط

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

تاريخ المشاركة 09 November 2008 - 11:04 AM

قمت بعمل هذا التريجر

CREATE OR REPLACE TRIGGER check_salary
BEFORE INSERT OR UPDATE OF salary, job_id ON employees
FOR EACH ROW
WHEN (NEW.job_id <> 'AD_PRES')
DECLARE
v_minsalary employees.salary%TYPE;
v_maxsalary employees.salary%TYPE;
BEGIN SELECT MIN(salary), MAX(salary)
INTO v_minsalary, v_maxsalary
FROM employees WHERE job_id = :NEW.job_id;
IF :NEW.salary < v_minsalary OR :NEW.salary > v_maxsalary THEN
RAISE_APPLICATION_ERROR(-20505,'Out of range');
END IF;
END;
/




وبعدين عملت الكود ده


UPDATE employees SET salary = 3400 WHERE last_name¬ = 'Stiles';



بس للاسف طلعتلي الerror دي
SQL> UPDATE employees SET salary = 3400 WHERE last_name = 'Stiles';
UPDATE employees SET salary = 3400 WHERE last_name = 'Stiles'
*
ERROR at line 1:
ORA-04091: table HR.EMPLOYEES is mutating, trigger/function may not see it
ORA-06512: at "HR.CHECK_SALARY", line 5
ORA-04088: error during execution of trigger 'HR.CHECK_SALARY'




ارجو المساعده وجزاكم الله كل خير

#2 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,558 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at al Fanar Co. Riyadh KSA

تاريخ المشاركة 10 November 2008 - 12:40 AM

يمكنك استخدام خاصية البحث بالمنتدى ... للبحث عن حل مشكلة ال MUTATING

منها
إضغط هنا : مشاركة سابقة بالمنتدى

المقصود ب MUTATING TABLE
انه عند عمل تريجر مثلا BEFORE UPDATE علي تابل
اذا كنت تقوم بسيليكت من نفس اتابل الذي تعمل فيه الابديت
هيطلع ايرور و قت التفيذ
ان هذا التابل MUATATING و لا يمكن ان تعمل منه سيليكت
اي انه يتغير
لذلك لا يمكن عمل اي سيليكت من نفس التابل اللي عليه التريجر

فهى باختصار انك اذا انشات trigger وعايزة يعمل fire عندما تريد مثلا عمل insert ثم قمت بكتابة جملة dml فى ال trigger body فان هذا سيؤدى لظهور رسالة خطا mutating table اى ان هناك تداخل او عدم تساق حيث لا يمكن عمل insert فى جدول وعمل select فى نفس الجدول وفى نفس الوقت


ORA-04091 table string.string is mutating, trigger/function may not see it
Cause: A trigger (or a user defined PL/SQL 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.
Action: Rewrite the trigger (or function) so it does not read that table
.


اليك هذا الرابط
إضغط هنا Avoiding Mutating Tables

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#3 Slamonty

Slamonty

    عضو

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

تاريخ المشاركة 10 November 2008 - 09:40 AM

جزاك الله خيرا اخ امجد, فعلا رد وافي
لا إله إلا الله وحده لا شريك له له الملك و له الحمد يحيي و يميت و هو علي كل شيء قدير