بتاريخ: 1 أغسطس 201015 سنة comment_197877 CREATE TRIGGER AAAA BEFORE UPDATE OR DELETE ON XXXX FRO EACH ROW DECLARE CURSOR ZZZ IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COL //مثلا WHERE TABLE_NAME ='ACOUNT' AND OWNER = 'SHR'; OLD_VAL VARCHAR2(500); NEW_VAL VARCHAR2(500); BEGIN IF UPDATING THEN FOR I IN ZZZ LOOP EXECUTE IMMEDIATE ':OLD.'||I.COLUMN_NAME INTO OLD_VAL;\\ الجمله الذي فيها الخطا EXECUTE IMMEDIATE ':NEW.'||I.COLUMN_NAME INTO NEW_VAL; IF OLD_VAL != NEW_VAL THEN INSERT INTO HELP VALUES(OLD_VALUE,NEW_VALUE) END IF; END LOOP; END IF; END; الرجو من الاعضا الكرام ان يساعدوني في هذا التريجر في اسرع وقت ممكنالعمل الذي افكر فيه هو نظام مراقبة المستخدميين من ناحية التعديل والحذف من قاعدة البيانات نفسها نفرض ان لدينا جدول اسمه CREATE TABLE DDD ( A VARCHAR2(20), B VARCHAR2(20), C VARCHAR2(20), D VARCHAR2(20), E VARCHAR2(20), ); الكرسر يقوم باسترجاع A,B,C,D ثم قبل التعديل يطلع القيمه القديمه والجديده لكل واحد ثم يقارن هل القيمه الجديده تساوي القيمه الجديده اذا كان مختلف يقوم بحفظ القيم في جدول اخرمع العلم ان هذا الجدول مثال لان الجداول عندي اقل جدول فيه 100 كلومفارجو من لديه اي فكره لا يبخل عليا او يعطيني ارقم وانا اتواصل معه انا في السعوديه[email protected] الترغر.txt تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة comment_197904 EXECUTE IMMEDIATE ':OLD.'||I.COLUMN_NAME INTO OLD_VALدى المقصود بيها سيلكت ولا انسيرت انت عايزة يعمل ايه بعد اكسيكيوت اميديتممكن تقارن على طول الجديد بالقديم دون اكسيكيوت امديت تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة كاتب الموضوع comment_197907 كيف اعمل مقارنه بهذي الطريقه ممكن تعطيني حل او اعطني اي رقم للتواصل معك لاهمية الموضوع تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة comment_197917 عملتلك التريجر ده CREATE OR REPLACE TRIGGER UPD_DEL BEFORE UPDATE ON EMPLOYEES FOR EACH ROW DECLARE BEGIN IF :OLD.EMPLOYEE_ID<>:NEW.EMPLOYEE_ID THEN INSERT INTO EMPLOYEES_DELETED VALUES (:OLD.EMPLOYEE_ID); END IF; END; كريت بس جدول EMPLOYEES_DELETEDوحط فيه عمود واحد نوعه رقم لتخزين رقم الموظف المعدلانا جربتها على اتش ار سكيما شغالة تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة comment_197918 اليك هذا الرابط سوف يساعدك جداً وبشكل مبساطhttp://www.araboug.org/ib/index.php?showtopic=24857 تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة كاتب الموضوع comment_197946 الظاهر انتم ما فهمتم قصدي انا عملت كرسر يجيب لي كل الفيلد من الجدول المحدد ثم بعد كذا يمرر القيم من الكرسر الى old و new اوتوماتيك مثلا جدول emp الكرسر يجيب كل الكولم التي في جدول emp ثم يمرر رقم الموظف الى old وnew ثم يمرر اسم الموظف وهكذا حتى يخلص الكرسر CREATE TRIGGER AAAA BEFORE UPDATE OR DELETE ON XXXX FRO EACH ROW DECLARE CURSOR ZZZ IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COL //مثلا WHERE TABLE_NAME ='ACOUNT' AND OWNER = 'SHR'; OLD_VAL VARCHAR2(500); NEW_VAL VARCHAR2(500); BEGIN IF UPDATING THEN FOR I IN ZZZ LOOP EXECUTE IMMEDIATE ':OLD.'||I.COLUMN_NAME INTO OLD_VAL;\\ الجمله الذي فيها الخطا EXECUTE IMMEDIATE ':NEW.'||I.COLUMN_NAME INTO NEW_VAL; IF OLD_VAL != NEW_VAL THEN INSERT INTO HELP VALUES(OLD_VALUE,NEW_VALUE) END IF; END LOOP; END IF; END; تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة comment_197956 CREATE TRIGGER AAAA BEFORE UPDATE OR DELETE ON XXXX FOR EACH ROW DECLARE CURSOR ZZZ IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COL //مثلا WHERE TABLE_NAME ='ACOUNT' AND OWNER = 'SHR'; OLD_VAL VARCHAR2(500); NEW_VAL VARCHAR2(500); BEGIN IF UPDATING THEN FOR I IN ZZZ LOOP OLD_VAL:= ':OLD.'||I.COLUMN_NAME ;\\ الجمله بعد التصحيح NEW_VAL:=':NEW.'||I.COLUMN_NAME ; IF OLD_VAL != NEW_VAL THEN INSERT INTO HELP VALUES(OLD_VALUE,NEW_VALUE) END IF; END LOOP; END IF; END; تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة كاتب الموضوع comment_197971 الاخ asd202مثلا emp_no =30 عندما نعمل الطريقه التي تكلمة عنهاi.column_name= emp_nonew_nal:=':old.'||i.column_name;فهنا ينحفظ معك كل الجمله مثلا :old.emp_no: مش قيمة emp_no تقديم بلاغ
بتاريخ: 2 أغسطس 201015 سنة comment_197978 اخويه الغالي الداهيه اقدملك الحل الشافي لمشكلتك على هذا الرابطhttp://www.araboug.org/ib/index.php?showtopic=43136&st=15&p=197974entry197974 تقديم بلاغ
بتاريخ: 3 أغسطس 201015 سنة comment_198040 توجد طرق كثيرة ولكنه يريد الا يكتب اسماء العواميد لانها كثيرة جدااقل جدول 100 عامود DECLARE CURSOR T IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME ='EMPLOYEES' AND OWNER = 'HR'; STAT VARCHAR2(5000); BEGIN STAT:='CREATE OR REPLACE TRIGGER AAAA BEFORE UPDATE OR DELETE ON EMPLOYEES FOR EACH ROW DECLARE OLD_VAL VARCHAR2(200); NEW_VAL VARCHAR2(200); COL_NAME VARCHAR2(200); BEGIN IF UPDATING OR DELETING THEN '; FOR I IN T LOOP STAT:=STAT||' OLD_VAL:=:OLD.'||I.COLUMN_NAME||';'; STAT:=STAT||' NEW_VAL:=:NEW.'||I.COLUMN_NAME||';'; STAT:=STAT||' IF OLD_VAL <> NEW_VAL THEN INSERT INTO EMPLOYEES_DELETED VALUES(NEW_VAL,OLD_VAL); END IF ;'; END LOOP; STAT:=STAT||'END IF ; END;'; EXECUTE IMMEDIATE (STAT); END; تم تعديل 3 أغسطس 201015 سنة بواسطة asd202 تقديم بلاغ
بتاريخ: 3 أغسطس 201015 سنة comment_198041 ان شاء الله شغال تمام ولن تحتاج لكتابة اسماء العواميد تقديم بلاغ
بتاريخ: 4 أغسطس 201015 سنة كاتب الموضوع comment_198125 تحت التجريب بس ايش هذي تريجر او فنكشن واين تكون تقديم بلاغ
بتاريخ: 5 أغسطس 201015 سنة comment_198139 اخي تفضل هذه الشاشه (form) تستطيع من خلالها انشاء تريكر على كل جدول موجود في السكيما و جعل قيم التتبع تذهب الى جدول و احد هو TRACK_USER_TABLESحيث مثلا لديك 200 جدول و كل جدول يحتوي 100 حقل فليس من المعقول ان تقوم ببناء تريكر يدويا لكل جدول لذلك قمت بتصميم برنامج يبني التريكر اتوماتيكيا و يجعل كل قيم الجداول تذهب الى جدول واحد هو TRACK_USER_TABLES اي انك بعد ان تحصل على هذه الفورمه لن تضطر لكتابه اي كود و سوف تحصل على امكانيه تتبع كافه جداول السكيما الخاصه بك..صورة البرنامجصورة الجدول الذي تم به تخزين قيم التتبع MODULE2.rar تقديم بلاغ
بتاريخ: 9 أغسطس 201015 سنة كاتب الموضوع comment_198455 اشكرك اخي عمار اشكر كل صراحة حل ممتاز جدا بس بقي مشكله واحده فقط ياليت تساعدنياريد ان يحفظ كل الصف في حقل واحد مش كل حقل في فيلدمثلا عدلت اي شي في جدول الموظفين ينحفظ كل البيانات القديمه للصف الذي تعدل في فلد واحد الذي هو old تم تعديل 9 أغسطس 201015 سنة بواسطة الداهيه1 تقديم بلاغ
بتاريخ: 9 أغسطس 201015 سنة comment_198457 طيب اخي و كيف تفصل بين حقول هذا الصف برمز (,) مثلا؟؟؟ تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.