بتاريخ: 24 يناير 201214 سنة comment_219931 السلام عليكم و رحمة الله و بركاته ما مشكلة إستخدام أمر commit مع أمر insert في الكود التالي في تريجر On- Errorو ما معني أمر PAUSE DECLARE vErrCode VARCHAR2(20) := ERROR_CODE; vErrText VARCHAR2(500):= ERROR_TEXT; vErrType VARCHAR2(3) := ERROR_TYPE; BEGIN IF vErrCode='40735' THEN Message('not found'); ELSIF vErrCode='40405' THEN NULL; ELSE MESSAGE(vErrCode||' - '||vErrText);--pause; INSERT INTO error_log (form_name, error_Type, error_code, error_message, system_mode) VALUES (UPPER(:SYSTEM.CURRENT_FORM), vErrType, TO_CHAR(vErrCode), vErrText, :SYSTEM.MODE); -- COMMIT; END IF; END; عند البحث وجدت الآتي : --Hi, --You can not write COMMIT inside a trigger.--Regards لكن أريد حفظ البيانات للأخطاء بالجدول مع كل خطأ ملحوظة (Datablock = No also items) تقديم بلاغ
بتاريخ: 24 يناير 201214 سنة comment_219967 يجب ان لا يحتوى التريجر على TCL transaction control language(commit,rollback,savepoint)التريجر ب fire كجزء من transaction عشان تحل المشكله وانت مصمم على عمل كويت يجب ان تستعمل PRAGMA AUTONOMOUS_TRANSACTION;على سبيل المثال [color=#000000]DECLARE vErrCode VARCHAR2[/color][color=#666600]([/color][color=#006666]20[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] ERROR_CODE[/color][color=#666600];[/color] [color=#000000] vErrText VARCHAR2[/color][color=#666600]([/color][color=#006666]500[/color][color=#666600]):=[/color][color=#000000] ERROR_TEXT[/color][color=#666600];[/color] [color=#000000] vErrType VARCHAR2[/color][color=#666600]([/color][color=#006666]3[/color][color=#666600])[/color][color=#000000] [/color][color=#666600]:=[/color][color=#000000] ERROR_TYPE[/color][color=#666600]; [/color] [color=#000000]PRAGMA AUTONOMOUS_TRANSACTION;[/color] [color=#000088]BEGIN[/color] [color=#000000] IF vErrCode[/color][color=#666600]=[/color][color=#008800]'40735'[/color][color=#000000] THEN [/color][color=#660066]Message[/color][color=#666600]([/color][color=#008800]'not found'[/color][color=#666600]);[/color] [color=#000000] ELSIF vErrCode[/color][color=#666600]=[/color][color=#008800]'40405'[/color][color=#000000] THEN NULL[/color][color=#666600];[/color] [color=#000000] ELSE MESSAGE[/color][color=#666600]([/color][color=#000000]vErrCode[/color][color=#666600]||[/color][color=#008800]' - '[/color][color=#666600]||[/color][color=#000000]vErrText[/color][color=#666600]);--[/color][color=#000000]pause[/color][color=#666600];[/color] [color=#000000] INSERT INTO error_log [/color][color=#666600]([/color][color=#000000]form_name[/color][color=#666600],[/color][color=#000000] error_Type[/color][color=#666600],[/color][color=#000000] error_code[/color][color=#666600],[/color][color=#000000] error_message[/color][color=#666600],[/color][color=#000000] system_mode[/color][color=#666600])[/color] [color=#000000] VALUES [/color][color=#666600]([/color][color=#000000]UPPER[/color][color=#666600](:[/color][color=#000000]SYSTEM[/color][color=#666600].[/color][color=#000000]CURRENT_FORM[/color][color=#666600]),[/color][color=#000000] vErrType[/color][color=#666600],[/color][color=#000000] TO_CHAR[/color][color=#666600]([/color][color=#000000]vErrCode[/color][color=#666600]),[/color][color=#000000] vErrText[/color][color=#666600],[/color][color=#000000] [/color][color=#666600]:[/color][color=#000000]SYSTEM[/color][color=#666600].[/color][color=#000000]MODE[/color][color=#666600]);[/color] [color=#000000] [/color][color=#666600]--[/color][color=#000000] COMMIT[/color][color=#666600];[/color] [color=#000000] [/color][color=#000088]END[/color][color=#000000] IF[/color][color=#666600];[/color] [color=#000088]END[/color][color=#666600];[/color] تقديم بلاغ
بتاريخ: 24 يناير 201214 سنة comment_219968 DECLARE vErrCode VARCHAR2(20) := ERROR_CODE; vErrText VARCHAR2(500):= ERROR_TEXT; vErrType VARCHAR2(3) := ERROR_TYPE; PRAGMA AUTONOMOUS_TRANSACTION; BEGIN IF vErrCode='40735' THEN Message('not found'); ELSIF vErrCode='40405' THEN NULL; ELSE MESSAGE(vErrCode||' - '||vErrText);--pause; INSERT INTO error_log (form_name, error_Type, error_code, error_message, system_mode) VALUES (UPPER(:SYSTEM.CURRENT_FORM), vErrType, TO_CHAR(vErrCode), vErrText, :SYSTEM.MODE); -- COMMIT; END IF; END تقديم بلاغ
بتاريخ: 24 يناير 201214 سنة كاتب الموضوع comment_219971 شكراً لكن للأسف الأمر PRAGMA AUTONOMOUS_TRANSACTION;لا يعمل حيث تظهر رسالة الخطأ التالية (مرفق الصورة للتوضيح) تقديم بلاغ
بتاريخ: 25 يناير 201214 سنة كاتب الموضوع comment_219983 انا بتكلم على الداتا بيز أوك بس المشكلة الGLOBAL VARIABLE كقيم اللي عاوز أخزنهم مع رقم الخطأ و النوع ...إلخUPPER(:SYSTEM.CURRENT_FORM) فأجيبهم إزاي من الداتا بيز ؟؟؟ تقديم بلاغ
بتاريخ: 25 يناير 201214 سنة comment_220001 نسيت اقولك امبارح ان التريجر بيعمل automatic commit تقديم بلاغ
بتاريخ: 25 يناير 201214 سنة كاتب الموضوع comment_220010 نسيت اقولك امبارح ان التريجر بيعمل automatic commit طيب هاجرب و متشكر ليك جدا تقديم بلاغ
بتاريخ: 25 يناير 201214 سنة كاتب الموضوع comment_220012 نسيت اقولك امبارح ان التريجر بيعمل automatic commit متشكر للرد لكن إنت بتقول إني أستعمل التريجر علي الداتابيزلكن مفيش تريجر إسمو on-error في لداتابيز أما في الفورمز أيوةكمان الأمر PRAGMA AUTONOMOUS_TRANSACTION;مبيشتغلشي علي الفورم علي حسب ما فهمت من البحث تقديم بلاغ
بتاريخ: 25 يناير 201214 سنة comment_220013 لما قولت انى نسيت اقولك امبارح ان التريجر بيعمل اوتوماتيك سيف انا كل كلامى على الداتا بيز معرفش بصراحه ايه الوضع بلنسبه للفورمز تقديم بلاغ
بتاريخ: 26 يناير 201214 سنة كاتب الموضوع comment_220019 لما قولت انى نسيت اقولك امبارح ان التريجر بيعمل اوتوماتيك سيفانا كل كلامى على الداتا بيز معرفش بصراحه ايه الوضع بلنسبه للفورمز متشكر علي العموم و لو وصلت لحاجة إن شاء الله أبلغك تقديم بلاغ
بتاريخ: 26 يناير 201214 سنة كاتب الموضوع comment_220053 أنا مكونتش فاهم قصدك بالظبط في الاوللكن دلوقتي كلو تمام و متشكر ليك جداً و ياريت لو في أي إضافة تقولي :في الداتابيز : create table error_log( FORMID NUMBER(5) , USER_ID varchar2(55) , ERROR_DATETIME varchar2(25) , error_Type varchar2(50) , error_code varchar2(50) , error_message varchar2(255) ,CONSTRAINT ERROR_LOG_USERS_fk FOREIGN KEY(USER_ID) REFERENCES USERS(USER_ID), CONSTRAINT ERROR_LOG_FORMS_fk FOREIGN KEY(FORMID) REFERENCES Forms(FORMID)); CREATE OR REPLACE PROCEDURE log_error ( P_FORMID VARCHAR2, P_ERROR_TYPE VARCHAR2, P_ERROR_CODE VARCHAR2, P_ERROR_MESSAGE VARCHAR2, P_USER_ID VARCHAR2, P_ERROR_DATETIME VARCHAR2 ) IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO error_log (FORMID, error_Type, error_code, error_message, USER_ID,ERROR_DATETIME) VALUES (P_FORMID, P_error_Type, P_error_code, P_error_message, P_USER_ID,P_ERROR_DATETIME); COMMIT; END log_error; / SHOW ERRORS في الفورمة :في تريجر On-error علي مستوي الفورمة DECLARE vErrCode VARCHAR2(20) := ERROR_CODE; vErrText VARCHAR2(500):= ERROR_TEXT; vErrType VARCHAR2(3) := ERROR_TYPE; --PRAGMA AUTONOMOUS_TRANSACTION; F NUMBER; BEGIN IF vErrCode='40735' THEN MESSAGE('áã íÝáÍ ÇáÈÍË'); MESSAGE('áã íÝáÍ ÇáÈÍË'); ELSIF vErrCode='40405' THEN NULL; ELSE MESSAGE(vErrCode||' - '||vErrText);--pause; SELECT FORMID INTO F FROM FORMS WHERE UPPER(FORMS.ENGNAME)= UPPER(:SYSTEM.CURRENT_FORM); log_error(F, vErrType, vErrCode, vErrText, :global.v_user,TO_CHAR(sysdate, 'DD-MM-YYYY hh24:mi:ss')); --Hi, --You can not write COMMIT inside a trigger. --Regards END IF; END; تقديم بلاغ
بتاريخ: 27 يناير 201214 سنة comment_220064 كنت بفكر اصلا فى الحوار ده امبارح وقولت ان انا موضحتش لك كويس وكنت داخل اصلا عشان اوضحلك لقيتك الحمد لله حللها تقديم بلاغ
بتاريخ: 27 يناير 201214 سنة كاتب الموضوع comment_220067 كنت بفكر اصلا فى الحوار ده امبارح وقولت ان انا موضحتش لك كويس وكنت داخل اصلا عشان اوضحلك لقيتك الحمد لله حللها لأ انا كدة ازعل إنتا مش واثق فيا ولا إيه ههههه تقديم بلاغ
بتاريخ: 1 فبراير 201214 سنة comment_220273 السلام عليكملحل المشكلة على الفورم استخدم forms_ddl('commit') تقديم بلاغ
بتاريخ: 1 فبراير 201214 سنة كاتب الموضوع comment_220284 السلام عليكملحل المشكلة على الفورم استخدم forms_ddl('commit') شكراً ليك جداًإن شاء الله أجرب و ارد عليك تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.