بتاريخ: 3 يونيو 200520 سنة comment_38133 هذا هو TRIGGER create or replace TRIGGER DONATION_QUA AFTER INSERT ON DONATIONFOR EACH ROW declare new_id number; KIND_ID number; NEW_QUA number;BEGIN select DONATION_SEQ.CURRVAL into new_id from Dual; SELECT DONATION_KIND_NO INTO KIND_ID FROM DONATION WHERE DONATION_NO = new_id; SELECT QUANTITY INTO NEW_QUA FROM DONATION WHERE DONATION_NO = new_id; new_QUANTITY(KIND_ID, NEW_QUA);END;/ وهذا هو ERROR الي يحدث لحظة ال INSERT SQL> INSERT INTO DONATION VALUES(1,2,1,100,TO_DATE('03-NOV-1998', 'dd-MON-yyyy'));INSERT INTO DONATION VALUES(1,2,1,100,TO_DATE('03-NOV-1998', 'dd-MON-yyyy')) *ERROR at line 1:ORA-04091: table SCOTT.DONATION is mutating, trigger/function may not see itORA-06512: at "SCOTT.DONATION_QUA", line 7ORA-04088: error during execution of trigger 'SCOTT.DONATION_QUA' تقديم بلاغ
بتاريخ: 3 يونيو 200520 سنة comment_38135 السلام عليكم ورحمة الله وبركاته تم عرض موضوع ال mutating من قبل بالمنتدى راجع هذه الروابط http://www.araboug.org/ib/index.php?sho...283&hl=mutatinghttp://www.araboug.org/ib/index.php?sho...653&hl=mutating تم تعديل 3 يونيو 200520 سنة بواسطة Amgad تقديم بلاغ
بتاريخ: 3 يونيو 200520 سنة كاتب الموضوع comment_38142 شكرا لك يا اخ امجد على تجاوبك وهذا التعديل على TRIGGER ولكن لا فائدة create or replace TRIGGER DONATION_QUA AFTER INSERT ON DONATION FOR EACH ROW declare new_id number; KIND_ID number; NEW_QUA number; BEGIN select DONATION_SEQ.CURRVAL into new_id from Dual; SELECT DONATION_KIND_NO INTO KIND_ID FROM DONATION WHERE :NEW.DONATION_NO = new_id; SELECT QUANTITY INTO NEW_QUA FROM DONATION WHERE :NEW.DONATION_NO = new_id; new_QUANTITY(KIND_ID, NEW_QUA); END; / ولتوضح اكثر هذا TRIGGER لإنشاء SEQUENCE على نفس الجدول create or replace TRIGGER INSERT_DONATION_ID BEFORE INSERT ON DONATION FOR EACH ROW declare new_id number; BEGIN select DONATION_SEQ.NEXTVAL into new_id from Dual; :new.DONATION_NO := new_id; END; / تقديم بلاغ
بتاريخ: 4 يونيو 200520 سنة comment_38218 السلام عليكم اولا : لا اعرف ما سبب تكوين ال TRIGGER INSERT_DONATION_ID فاكيد انك كونت الsequance من قبل واسمه DONATION_SEQالغى هذا التريجير ثانيا : عدل أمر ال insert الى SQL> INSERT INTO DONATION VALUES(DONATION_SEQ.NEXTVAL ,2,1,100,TO_DATE('03-NOV-1998', 'dd-MON-yyyy')); ثالثا : لماذا استخدمت امر select مرتين لنفس الجدول مع نفس الشرط ؟. اعتقد يمكنك دمجهما فى امر واحد فقط هذا اجتهاد منى ولعلة يأتي بنتيجة .. اخبرنا بالنتيجهوشرح اضافى للمطلوب بالظبط تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.