الانتقال إلى المحتوى
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.

سؤال عن : إستخدام Commit مع On-Error Trigger

Featured Replies

بتاريخ:

السلام عليكم و رحمة الله و بركاته


ما مشكلة إستخدام أمر 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)

بتاريخ:

يجب ان لا يحتوى التريجر على 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]

بتاريخ:



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

بتاريخ:
  • كاتب الموضوع

شكراً لكن للأسف الأمر
PRAGMA AUTONOMOUS_TRANSACTION;
لا يعمل حيث تظهر رسالة الخطأ التالية (مرفق الصورة للتوضيح)

post-94076-0-97983300-1327433553_thumb.jpg

بتاريخ:

انا بتكلم على الداتا بيز

بتاريخ:
  • كاتب الموضوع

انا بتكلم على الداتا بيز

أوك بس المشكلة الGLOBAL VARIABLE كقيم اللي عاوز أخزنهم مع رقم الخطأ و النوع ...إلخ
UPPER(:SYSTEM.CURRENT_FORM) 


فأجيبهم إزاي من الداتا بيز
؟؟؟

بتاريخ:

نسيت اقولك امبارح ان التريجر بيعمل automatic commit

بتاريخ:
  • كاتب الموضوع

نسيت اقولك امبارح ان التريجر بيعمل automatic commit

طيب هاجرب و متشكر ليك جدا
بتاريخ:
  • كاتب الموضوع

نسيت اقولك امبارح ان التريجر بيعمل automatic commit


متشكر للرد لكن إنت بتقول إني أستعمل التريجر علي الداتابيز

لكن مفيش تريجر إسمو on-error في لداتابيز أما في الفورمز أيوة

كمان الأمر PRAGMA AUTONOMOUS_TRANSACTION;

مبيشتغلشي علي الفورم علي حسب ما فهمت من البحث
بتاريخ:

لما قولت انى نسيت اقولك امبارح ان التريجر بيعمل اوتوماتيك سيف
انا كل كلامى على الداتا بيز معرفش بصراحه ايه الوضع بلنسبه للفورمز

بتاريخ:
  • كاتب الموضوع

لما قولت انى نسيت اقولك امبارح ان التريجر بيعمل اوتوماتيك سيف
انا كل كلامى على الداتا بيز معرفش بصراحه ايه الوضع بلنسبه للفورمز

متشكر علي العموم و لو وصلت لحاجة إن شاء الله أبلغك
بتاريخ:
  • كاتب الموضوع

أنا مكونتش فاهم قصدك بالظبط في الاول
لكن دلوقتي كلو تمام و متشكر ليك جداً :) و ياريت لو في أي إضافة تقولي :

في الداتابيز :


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;

بتاريخ:

كنت بفكر اصلا فى الحوار ده امبارح وقولت ان انا موضحتش لك كويس وكنت داخل اصلا عشان اوضحلك لقيتك الحمد لله حللها

بتاريخ:
  • كاتب الموضوع

كنت بفكر اصلا فى الحوار ده امبارح وقولت ان انا موضحتش لك كويس وكنت داخل اصلا عشان اوضحلك لقيتك الحمد لله حللها

لأ انا كدة ازعل إنتا مش واثق فيا ولا إيه ههههه
بتاريخ:

السلام عليكم

لحل المشكلة على الفورم استخدم forms_ddl('commit')

بتاريخ:
  • كاتب الموضوع

السلام عليكم

لحل المشكلة على الفورم استخدم forms_ddl('commit')

شكراً ليك جداً
إن شاء الله أجرب و ارد عليك

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

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

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

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

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

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.