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

عندي مشكلة مع هذا TRIGGER يا ليت تساعدوني


saudiprogrammer

Recommended Posts

هذا هو 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 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 it
ORA-06512: at "SCOTT.DONATION_QUA", line 7
ORA-04088: error during execution of trigger 'SCOTT.DONATION_QUA'

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

السلام عليكم ورحمة الله وبركاته
تم عرض موضوع ال mutating من قبل بالمنتدى
راجع هذه الروابط
http://www.araboug.org/ib/index.php?sho...283&hl=mutating

http://www.araboug.org/ib/index.php?sho...653&hl=mutating

تم تعديل بواسطة Amgad
رابط هذا التعليق
شارك

شكرا لك يا اخ امجد على تجاوبك وهذا التعديل على 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;
/

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

السلام عليكم
اولا : لا اعرف ما سبب تكوين ال 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 مرتين لنفس الجدول مع نفس الشرط ؟. اعتقد يمكنك دمجهما فى امر واحد فقط

هذا اجتهاد منى ولعلة يأتي بنتيجة .. اخبرنا بالنتيجه
وشرح اضافى للمطلوب بالظبط

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

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

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

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

×   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.

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

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

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