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

توضيح لعمل تريجر ارجو المساعده


elbanna2008

Recommended Posts

عندى جدول بهذا الشكل

CREATE TABLE "BFI"."SALES_GOOD" 
  (	"GOODS_ID" NUMBER(5,0) NOT NULL ENABLE, 
"C_ID" NUMBER(14,0) NOT NULL ENABLE, 
"COST" NUMBER(5,0) NOT NULL ENABLE, 
"GIVEN" NUMBER(5,0) NOT NULL ENABLE, 
"PREMIUMS" NUMBER(4,0), 
"NO_PREM" NUMBER(3,0), 
"S_DATE" DATE NOT NULL ENABLE, 
"QTY" NUMBER(7,2), 
"SALES_NO" NUMBER(5,0), 
"REMAIN" NUMBER(10,3), 
 CONSTRAINT "P_K_SAL_GOODS" PRIMARY KEY ("C_ID", "SALES_NO")
 USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "BFI"  ENABLE, 
 CONSTRAINT "F_K_SAL_GOODS_CID" FOREIGN KEY ("C_ID")
  REFERENCES "BFI"."CUSTMER" ("C_ID") ENABLE, 
 CONSTRAINT "F_K_SAL_GOODS_GOODS_ID" FOREIGN KEY ("GOODS_ID")
  REFERENCES "BFI"."GOODS" ("GOODS_ID") ENABLE
  ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "BFI";


وجدول اخر

CREATE TABLE "BFI"."INSTALLMENT" 
  (	"C_ID" NUMBER(14,0) NOT NULL ENABLE, 
"GOODS_ID" NUMBER(5,0) NOT NULL ENABLE, 
"CURENT_DATE" DATE DEFAULT SYSDATE NOT NULL ENABLE, 
"BILL_DATE" DATE NOT NULL ENABLE, 
"ALL_REMAIN" NUMBER(10,3), 
"REMAIN" NUMBER(10,3), 
"PREMIUM_NO" NUMBER(10,3), 
"PRMIUM_COST" NUMBER(4,0), 
 CONSTRAINT "P_K_INSTALL" PRIMARY KEY ("C_ID", "PREMIUM_NO")
 USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "BFI"  ENABLE, 
 CONSTRAINT "F_K_INSTALL_CID" FOREIGN KEY ("C_ID")
  REFERENCES "BFI"."CUSTMER" ("C_ID") ENABLE, 
 CONSTRAINT "F_K_INSTALL_GOODS_ID" FOREIGN KEY ("GOODS_ID")
  REFERENCES "BFI"."GOODS" ("GOODS_ID") ENABLE
  ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
 TABLESPACE "BFI";


اريد عمل تريجر بمجرد ادخال البيانات فى الجدول الاول يدخل هذه البيانات فى الجدول الثانى
بمثل هذا الشكل

create or replace
TRIGGER "t_installment "
AFTER INSERT OR UPDATE ON SALES_GOOD
FOR EACH ROW 
DECLARE
V DATE;
N NUMBER (14);
begin  
 SELECT ROUND(LAST_DAY(S_DATE),'MONTH') INTO V FROM SALES_GOOD WHERE
 C_ID =10000001;
 SELECT NVL(MAX(PREMIUM_NO),0)+1 INTO N FROM installment;
if inserting then 

insert into INSTALLMENT values(:new.C_id,:new.GOODS_ID,SYSDATE,V,NEW.REMAIN,NULL,N,NEW.PREMIUMS);
END IF;
END;


عند عمل هذا الترجر بيعملى ايرور
ممكن حد يساعدنى لحل هذه المشكله
وجزاكم الله خيرا

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

أخطاء بسيطة نسيان بعض الاشياء
لاحظ

create or replace
TRIGGER "t_installment "
AFTER INSERT OR UPDATE ON SALES_GOOD
FOR EACH ROW
begin DECLARE
V DATE;
N NUMBER (14);
begin SELECT ROUND(LAST_DAY(S_DATE),'MONTH') INTO V FROM SALES_GOOD WHERE C_ID =10000001;
 SELECT NVL(MAX(PREMIUM_NO),0)+1 INTO N FROM installment;
if inserting then
insert into INSTALLMENT values(:new.C_id,:new.GOODS_ID,SYSDATE,V,:NEW.REMAIN,NULL,N,:NEW.PREMIUMS);
END IF;
END;
end;

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

جزاك الله خيرا يا اخى على اهتمامك
شيئ اخر اريد معرفته
فى هذه العمليه انا اريد احتساب اول كمبياله وغالبا تكون بعد شهر فالكود ده لحساب اول شهر بعد الشراء
فمش هقوله يدخلى عميل عميل انا مش عارف اعملها انه بمجرد ما احفظ سلعه عميل يقوم بحساب تريخ اول كمبياله لهذا العميل وتسجيله فى الجدول الجديد
بدل ما اكتب



انا مش عارف اوضح اوى فارجو منك الصبر

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

جزاك الله خيرا على اهتمامك
مش عايز احدد ال C_ID برقم معين
الC_ID هوا رقم العميل
اريده ادخال التاريخ للعميل الذى تم تسجيله اي عميل تم تسجيله

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

فعلا هذا قصدى بالفعل
وقد جربتها كثيرا كدا بنفس الطريقه ولم تعمل الا بعد ما كتبتها انت
شكرا جدا على تعبك معايا
ولاكن لما بدخل بيانات عميل جديد واحفظها لا يتم حفظها بسبب

ORA-04091: table BFI.SALES_GOOD is mutating, trigger/function may not see it
ORA-06512: at "BFI.t_installment ", line 6
ORA-04088: error during execution of trigger 'BFI.t_installment '
رابط هذا التعليق
شارك

أتمنى أن ترسل الجداول ويكون مكتوبين بطريقة عادية
دون الزيادات الكثيرة التي بها كي نستطيع بإذن الله معرفة الخطأ بصراحة أنا تايه في الجداول
هتتعب شوية وتكتبهم عادي خالص وهحاول مساعدتك بإذن الله

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

أخي الكريم
جرب كده التريجر بهذا الشكل وتأكد من النتائج جيدا وقولي ربما يكون هناك خطأ

create or replace TRIGGER "t_installment" aFTER INSERT OR UPDATE ON SALES_GOOD
FOR EACH ROW 
declare
V DATE;
N INSTALLMENT.PREMIUM_NO%type;
begin SELECT NVL(MAX(PREMIUM_NO),0)+1 INTO N FROM installment;
if (inserting) then
insert into INSTALLMENT values(:new.C_id,:new.GOODS_ID,SYSDATE,ROUND(LAST_DAY(:new.S_DATE),'MONTH'),:NEW.REMAIN,NULL,n,:NEW.PREMIUMS);
END IF;
END;

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

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

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

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

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

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

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

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