بتاريخ: 10 يناير 200521 سنة comment_23676 الاخوة الاغزاء السلام عليكم و رحمة الله و بركاته عندي جدول وهو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 يناير 200521 سنة بواسطة decent تقديم بلاغ
بتاريخ: 11 يناير 200521 سنة comment_23910 السلام عليكم ،، 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 . تقديم بلاغ
بتاريخ: 16 يناير 200521 سنة كاتب الموضوع comment_24269 السلام عليكم و رحمة الله و بركاتهاخي الكريم Amgad شكراً لك على الرد و جزاك الله خيرلقد أعد كتابة التريقر مرة اخرة و اعطاني نفس الخطاء بل قمت بحزفة و كتابته مرة اخرة ولاكن اعطاني نفس الخطاءاخي الكريم لو في حلول اخرى ارجو افادتي بها تقديم بلاغ
بتاريخ: 16 يناير 200521 سنة comment_24326 السلام عليكم ورحمه الله ،،الاخ / 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; تقديم بلاغ
بتاريخ: 25 ديسمبر 201312 سنة comment_244590 السلام عليكم ورحمة الله وبركاتهاعتقد ان الخطاء هو في FOR EACH ROWلأنه لا يمكن استخدام DML في وجودهالذلك اما ان تحذف FOR EACH ROW او SELECTوان شاء الله تتحل المشكلة تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.