بتاريخ: 9 فبراير 201016 سنة comment_184579 السلام عليكم أرجو منكم المساعدة في تعديل التريجر ، فعندما اقوم بعمل create فانه لا يظهر اي اخطاء او تحذيرات .ولكن عندما اقوم بعملية ادخال حسب الشروط الموجودةفانه يعطينا رسالة الخطأ التالية : Database error number 1 has occurred when operating on WOSTATUS WOSTATUSID=11,587.ORA-00001: unique constraint (MAXIMO.TKSTATUS_NDX) violatedORA-06512: at "MAXIMO.SR_STATUS", line 24ORA-04088: error during execution of trigger 'MAXIMO.SR_STATUS ' [left]CREATE OR REPLACE TRIGGER SR_STATUS AFTER INSERT ON WOSTATUS REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW ---------------------- DECLARE CURSOR WO_CUR IS SELECT WONUM, STATUS, ORIGRECORDID FROM WORKORDER WHERE ORIGRECORDID = (SELECT ORIGRECORDID FROM WORKORDER WHERE WONUM =:NEW.WONUM) ; v1 number(2) ; o1 number(10) ; --X1 NUMBER(10) ; -------------------------------- BEGIN --select TKSTATUSSEQ.nextval INTO X1 FROM DUAL ; -------------------------- SELECT count(distinct STATUS) INTO v1 FROM WORKORDER WHERE ORIGRECORDID = (SELECT ORIGRECORDID FROM WORKORDER WHERE WONUM = :new.wonum) ; ---------------------------------- --select ORIGRECORDID into o1 from workorder where wonum = :NEW.WONUM ; --------------------------------- IF :NEW.STATUS = 'CLOSE' and v1 =1 THEN FOR WO_REC IN WO_CUR LOOP IF WO_REC.STATUS = 'CLOSE' AND WO_REC.ORIGRECORDID IS NOT NULL THEN UPDATE TICKET SET STATUS = 'CLOSED', changedate= sysdate WHERE TICKETID = WO_REC.ORIGRECORDID ; [b] [u]INSERT INTO TKSTATUS ( TICKETID,CLASS,STATUS,CHANGEBY,CHANGEDATE,TKSTATUSID )[/b] [b] VALUES( '1031', 'SR','CLOSED', 'MAXADMIN', SYSDATE, TKSTATUSSEQ.nextval );[/b] [/u] END IF ; END LOOP ; END IF; END SR_STATUS ; /[/left] علما بأني عندما اقوم بتنفيذ الادخال بشكل منفصل فانه يقبل ذلك أرجو المساعدة وجزاكم الله خيرا تقديم بلاغ
بتاريخ: 9 فبراير 201016 سنة comment_184589 IF :NEW.STATUS = 'CLOSE' and v1 =1 THEN FOR WO_REC IN WO_CUR LOOP IF WO_REC.STATUS = 'CLOSE' AND WO_REC.ORIGRECORDID IS NOT NULL THEN UPDATE TICKET SET STATUS = 'CLOSED', changedate= sysdate WHERE TICKETID = WO_REC.ORIGRECORDID ; INSERT INTO TKSTATUS ( TICKETID,CLASS,STATUS,CHANGEBY,CHANGEDATE,TKSTATUSID ) VALUES( '1031', 'SR','CLOSED', 'MAXADMIN', SYSDATE, TKSTATUSSEQ.nextval ); END IF ; END LOOP ; END IF; END SR_STATUS ; المشكله فى القطعه دى تاكد اخى الفاضل ان جمل UPDATE و انسيرت تكون مطبوطه من ناحيه الكونسترين و عشان تاكد قبل ماتنفذ انسيرت خد قيم الى مقروض التريجر يعملها فى الجدوال دىTICKET ونفذها بعيد عن التريجر وشوف هتنفذ ولا لا اكيد انت حططكونسترين معين ومش واخد بالك لو موسلتش لحاجه يارت تعمل DESC لجدوال عشان نقدر نساعدك وربنا معاك تقديم بلاغ
بتاريخ: 10 فبراير 201016 سنة كاتب الموضوع comment_184673 أخي المشكلة في في تعليمة Update لأنه عندما اقوم الغيها من التريجر واقوم بتنفيذه لا اواجه اي مشكلة ولكن عندما اضيفها للتريجر فانه يعطيني خطا بالتنفيذهل انا قادر على استخدام KSTATUSSEQ.nextval بداخل التريجر ام ان هناك طريقة اخرى لاستخدامها وتنفيذ عملية الادخال ؟؟؟وشكراجزيلا على اهتمامكم تقديم بلاغ
بتاريخ: 10 فبراير 201016 سنة comment_184679 هل انت جربت الجماه من غير ماتستخدم KSTATUSSEQ.nextval اى انك تدخل القيمه يدوى من غير سيكزنس واشتغلت لو اشتغلت ممكن تعمل بروستدر يحمل اى فريبول بقيمه KSTATUSSEQ.nextva وتعملها كول داخال التريجر وتستخدم الفريبول بدل من KSTATUSSEQ.nextvaبس انا مفتكرش ان ده السبب لان سيكونس مكن تستخدما فى اى مكان بدل انت عملها على نفس السكيمه على عموم ركز عاى ان جمله Update مش بتنتهك اى كونستران وبالتوفيق تم تعديل 10 فبراير 201016 سنة بواسطة mostfa_future تقديم بلاغ
بتاريخ: 10 فبراير 201016 سنة كاتب الموضوع comment_184690 عفوا اخي الكريم في المشاركة سبقت قصدت ان المشكلة ليست من update بل المشكلة من insert فعندما الغي تعليمة insert و ابقي على جملة update فقط فان التريجر لا يعطيني اي رسالة خطأ عند التطبيق ولكن عند اضافة Insert فانه يعطيني الرسالة السابقة وبنفس الوقت عندما اقوم بتنفيذ نفس تعليمة ال insert بشكل منفصل فانها تقبل ذلك ولا تعطيني اي خطأ تقديم بلاغ
بتاريخ: 10 فبراير 201016 سنة comment_184696 INSERT INTO TKSTATUS ( TICKETID,CLASS,STATUS,CHANGEBY,CHANGEDATE,TKSTATUSID )VALUES( '1031', 'SR','CLOSED', 'MAXADMIN', SYSDATE, TKSTATUSSEQ.nextval ); تاكد من كل الكونستران الى موجد على الجدول البداخل فى البيانات لان رساله الخطاء متعلقه بنتهاك كونسترين اسمه MAXIMO.TKSTATUS_NDXORA-00001: unique constraint (MAXIMO.TKSTATUS_NDX) violatedاكيد الكولم ده STATUS نت حطط عليه كونسترين unique اتاكد من كل كنوسترين الى موجد على الجدوال لو موصلتش لحاجه ابعت لينا DESC لجدوال عشان نقدر نساعدك و بالتوفيق تقديم بلاغ
بتاريخ: 11 فبراير 201016 سنة كاتب الموضوع comment_184726 عزيزي مصطفى هذه الكونستراينت الموجودة على الجدول والتريجر الموجود عليه select INDEX_OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME,COLUMN_NAME,COLUMN_POSITION from all_ind_columns where index_name='TKSTATUS_NDX'; INDEX_OWNER INDEX_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME COLUMN_POSITION MAXIMO TKSTATUS_NDX MAXIMO TKSTATUS TKSTATUSID 1 select INDEX_OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME,COLUMN_NAME,COLUMN_POSITION from all_ind_columns where index_name='TKSTATUS_NDX1'; INDEX_OWNER INDEX_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME COLUMN_POSITION MAXIMO TKSTATUS_NDX1 MAXIMO TKSTATUS TICKETID 1 1 MAXIMO TKSTATUS_NDX1 MAXIMO TKSTATUS CLASS 2 MAXIMO TKSTATUS_NDX1 MAXIMO TKSTATUS STATUS 3 MAXIMO TKSTATUS_NDX1 MAXIMO TKSTATUS CHANGEDATE 4 CREATE OR REPLACE TRIGGER "MAXIMO".TKSTATUS_T BEFORE INSERT OR UPDATE ON TKSTATUS FOR EACH ROW DECLARE NEXTVAL INTEGER; BEGIN SELECT MAXSEQ.NEXTVAL INTO NEXTVAL FROM DUAL; :NEW.ROWSTAMP := NEXTVAL; END; ولكم جزيل الشكر تقديم بلاغ
بتاريخ: 11 فبراير 201016 سنة comment_184758 استخدم الجمله دى عشان تعرض الكونسترين SELECT constraint_name , constraint_type FROM user_constraints WHERE table_name = 'اسم الجدول الى بيعمل مشكاه فى الانسريت' ;وهات الناتج بتاعه بالتوفيق تقديم بلاغ
بتاريخ: 13 فبراير 201016 سنة كاتب الموضوع comment_184850 [left]SELECT constraint_name , constraint_type FROM user_constraints WHERE table_name = 'TKSTATUS' ; [/left] CONSTRAINT_NAME CONSTRAINT_TYPESYS_C006387 CSYS_C006388 CSYS_C006389 CSYS_C006390 CSYS_C006391 CSYS_C006392 CSYS_C006393 C تقديم بلاغ
بتاريخ: 13 فبراير 201016 سنة comment_184883 SELECT constraint_name , constraint_typeFROM user_constraintsWHERE constraint_name = 'MAXIMO.TKSTATUS_NDX ' ;وجرب شوف هيطلع كونستران بالاسم ده مع مرعاء انك تكتب اسم الكونستران كابتلوبعدين تاكد انك مدى قيمه لكل قبم الجدول لان عندك 7 كونستران TYPE بتاعهم c يعنى لما CHECK او NOT NULL فلو 7 كلهم NOT NULL فانت عامل فى الانسريت 6 قيم بس ممكنتكون المشكله هنا و بالتوفيق تقديم بلاغ
بتاريخ: 16 فبراير 201016 سنة كاتب الموضوع comment_185180 أخي مصطفى المشكلة كانت بالكرسر وذلك لأنه يقوم بادخال نفس القيمة مرتين وهذا ما يجعله يخترق القيود الموجودة وهذا هو الحل للمشكلة شكرا جزيلا على تعاونكم وجهودكم CREATE OR REPLACE TRIGGER MAXIMO.SR_STATUS AFTER INSERT ON MAXIMO.WOSTATUS REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW -------------------------------- DECLARE V1 number(2) ; O1 number(10) ; TKTID number (10); -------------------------------- BEGIN SELECT ORIGRECORDID INTO TKTID FROM WORKORDER WHERE WONUM = :NEW.WONUM; SELECT COUNT(ORIGRECORDID) INTO O1 FROM WORKORDER WHERE ORIGRECORDID =TKTID; SELECT COUNT(DISTINCT STATUS) INTO V1 FROM WORKORDER WHERE ORIGRECORDID =TKTID; -------------------------------- IF :NEW.STATUS='CLOSE' and O1>1 AND V1=1 THEN UPDATE TICKET SET STATUS = 'CLOSED', changedate = sysdate WHERE TICKETID = TKTID ; ----------------- INSERT INTO TKSTATUS (TICKETID,CLASS,STATUS,CHANGEBY, CHANGEDATE,MEMO,SITEID,ORGID,TKSTATUSID,ROWSTAMP) VALUES(TKTID, 'SR', 'CLOSED', 'MAXADMIN', SYSDATE, NULL, NULL, NULL, TKSTATUSSEQ.nextval, '1') ; ----------------- END IF ; -------------------------------- END SR_STATUS ; / -------------------------------- تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.