decent بتاريخ: 10 يناير 2005 تقديم بلاغ مشاركة بتاريخ: 10 يناير 2005 (معدل) الاخوة الاغزاء السلام عليكم و رحمة الله و بركاته عندي جدول وهوCREATE TABLE ACCOUNTS( ACCOUNTID NUMBER (10,0) NOT NULL, ACCOUNTNAME VARCHAR2 (100 ) NOT NULL, MAINACOUNTID NUMBER (10,0) DEFAULT 0 NOT NULL, ACCOUNTTYPE VARCHAR2 (5 ) NOT NULL, ACCOUNTKIND VARCHAR2 (5 ) NOT NULL, OPENBALANCE NUMBER (15,2) DEFAULT 0 NOT NULL, OPENBALANCETYPE VARCHAR2 (6 ), OPENDATE DATE NOT NULL, LASTACCOUNTS VARCHAR2 (5 ), CR NUMBER (20,2), DR NUMBER (20,2))وقد قمت بانشاء تريقر وهوCREATE OR REPLACE TRIGGER ACCOUNTS_BIUDRBEFORE UPDATEOF ACCOUNTTYPEON ACCOUNTSFOR EACH ROWDECLARERES integer;EXP_ERR EXCEPTION;BEGIN IF UPDATING THEN IF :OLD.ACCOUNTTYPE = 'MAIN' THEN SELECT count(*) INTO RES FROM ACCOUNTS WHERE MAINACOUNTID = :OLD.ACCOUNTID; IF RES > 0 THEN RAISE EXP_ERR; END IF; END IF; END IF; EXCEPTION WHEN EXP_ERR THEN RAISE_APPLICATION_ERROR(-20000,'رسالة الخطاء');END;وعند التعديل في الحقل المعني يقع هذا الخطاء ارجو من الاخوة الاعزاء افادتي في كيفية حل هذه المشكلةوفقكم الله تم تعديل 11 يناير 2005 بواسطة decent اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 11 يناير 2005 تقديم بلاغ مشاركة بتاريخ: 11 يناير 2005 السلام عليكم ،، 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 thisstatement) attempted to look at (or modify) a table that was in the middle ofbeing modified by the statement which fired it.Action: Rewrite the trigger (or function) so it does not read that table . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
decent بتاريخ: 16 يناير 2005 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 16 يناير 2005 السلام عليكم و رحمة الله و بركاتهاخي الكريم Amgad شكراً لك على الرد و جزاك الله خيرلقد أعد كتابة التريقر مرة اخرة و اعطاني نفس الخطاء بل قمت بحزفة و كتابته مرة اخرة ولاكن اعطاني نفس الخطاءاخي الكريم لو في حلول اخرى ارجو افادتي بها اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 16 يناير 2005 تقديم بلاغ مشاركة بتاريخ: 16 يناير 2005 السلام عليكم ورحمه الله ،،الاخ / decentاعتقد ان سبب الخطأ هو انه اثناء تنفيذ الTRIGGER أي عند حدوث تعديل فى الجدول ACCOUNTS .. فانه لايجوز ان تستخدم نفس الجدول داخل الTRIGGER مع امر SELECT COUNT(*) FROM ACCOUNTSلان حالة الجدول غير محدده .. هل تم التعديل فيه ام لا ؟؟ فكيف يمكن اجراء امر SELECT >>ارجوا ان تكون الفكرة .. وصلت اليك .. عموما اقترح عليك التعديل التالي فى الTRIGGER CREATE OR REPLACE TRIGGER ACCOUNTS_BIUDR BEFORE UPDATE OF ACCOUNTTYPE ON ACCOUNTS FOR EACH ROW DECLARE RES integer; EXP_ERR EXCEPTION; BEGIN IF UPDATING THEN IF :OLD.ACCOUNTTYPE = 'MAIN' THEN RAISE EXP_ERR; END IF; END IF; EXCEPTION WHEN EXP_ERR THEN RAISE_APPLICATION_ERROR(-20000,'ERROR ERROR ERROR'); END; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedghaly بتاريخ: 25 ديسمبر 2013 تقديم بلاغ مشاركة بتاريخ: 25 ديسمبر 2013 السلام عليكم ورحمة الله وبركاتهاعتقد ان الخطاء هو في FOR EACH ROWلأنه لا يمكن استخدام DML في وجودهالذلك اما ان تحذف FOR EACH ROW او SELECTوان شاء الله تتحل المشكلة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.