الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

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

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

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.