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

Problem In Trigger ... mutating


mido_develper

Recommended Posts

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

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'





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

رابط هذا التعليق
شارك

يمكنك استخدام خاصية البحث بالمنتدى ... للبحث عن حل مشكلة ال 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

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية