بتاريخ: 18 أغسطس 200916 سنة comment_166991 السلام عليكمعندي سوال بخصوص طريقة كتابة تريجرز جدولين وهذا التريجر يخص Audit وبصراحه الكود اللي كتبتة مانفع معايا على جدولين يعني فقط يقبل واحد جدول ولكن انا اريد ان اضيف جدول اليوسر مع الجدول الاساسي حتى اعرف مين اللي عمل التغييرات طبعا انا هذا الترجرز فقط اريد اجربة يعني لو انا بدي اعمل مراقبة على النظام كله راح يكون صعب شوية. طبعا بيطلع لي خطا وهو كومبيليشن ايرور. طبعا انا كتبت الكود مرتين وما نفع معايا. اذا كان عندكم فكرة كيف اعدل في الكود او طريقة لاظهار اسم اليوسر لانة انا عندي جدول خاص باليوسر. CREATE OR REPLACE TRIGGER referencing_clause AFTER UPDATE OR INSERT OR DELETE ON PATIENT, USER_PRV REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN INSERT INTO audit_log (o_fname, o_mname, o_lname,o_patid, n_fname,n_mname,n_lname,n_patid, chng_by,chng_time, chng_when) VALUES (:OLD.first_name, :OLD.last_name, :OLD.family_name, :OLD.PAT_ID, :NEW.first_name, :NEW.last_name, :NEW.family_name , :NEW.PAT_ID, :USR_ENAME, SYSDATE, SYSDATE); END referencing_clause; / CREATE OR REPLACE TRIGGER referencing_clausee AFTER UPDATE OR INSERT OR DELETE ON PATIENT REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN INSERT INTO audit_log (o_fname, o_mname, o_lname,o_patid, n_fname,n_mname,n_lname,n_patid, chng_by,chng_time, chng_when) VALUES (:OLD.first_name, :OLD.last_name, :OLD.family_name, :OLD.PAT_ID, :NEW.first_name, :NEW.last_name, :NEW.family_name , :NEW.PAT_ID, :USER_PRV.USR_ENAME, SYSDATE, SYSDATE); END referencing_clausee; / تقديم بلاغ
بتاريخ: 18 أغسطس 200916 سنة comment_167000 ممكن توضيح اكثرايه المطلوب بالظبط تم تعديل 18 أغسطس 200916 سنة بواسطة abdu1_far تقديم بلاغ
بتاريخ: 18 أغسطس 200916 سنة comment_167018 اخي العزيزسؤالك غير مفهومهل تريد عمل Auditing على النظام عن طريق الفورم مثلاًارجو التوضيح؟؟؟؟؟؟ تقديم بلاغ
بتاريخ: 18 أغسطس 200916 سنة comment_167047 لا يمكنك وضع تريجر على جدولين بآن واحد لازم تعمل تريجر لكل جدول. تقديم بلاغ
بتاريخ: 18 أغسطس 200916 سنة كاتب الموضوع comment_167055 طيب انا راح اشرح بشكل اكثيرالان عندي جدول للمرضى اسم المريض الاول واسمه الثاني واللقب وايضا الايدي تبع المريض كما ترى في الترجرز اللي انا واضعه لك بالاول. الان انا لو بدي اعمل اوديت على هذا الجدول وبدي اعرف مين اللي حذف ومين اللي عمل ابديت ومين اللي عمل انسيرت على جدول المرضى وفي اي وقت اتعمل اي احد من هذه الترانسيكشن وفي اي يوم. طبعا انا عملت جدول وكما ترونة هنا بالاسفل CREATE TABLE audit_log ( o_fname VARCHAR2(20), o_mname VARCHAR2(20), o_lname VARCHAR2(20), o_patid NUMBER(10), n_fname VARCHAR2(20), n_mname VARCHAR2(20), n_lname VARCHAR2(20), n_patid NUMBER(10), chng_by VARCHAR2(100), chng_time VARCHAR2(20), chng_when DATE); ولكن عندما استخدم التريجرز اللي كاتبة بالاول مايشتغل معايا صحيح وكلة بسبب اضافة اسم اليوسر التابع لجدول المستخدمين فانا فقط يهمني اسم اليوسر حتى اعرف مين اللي عمل احد الاجراءات.طبعا التريجرز اللي انا واضعه هنا على مستوى قاعدة البيانات معا اني ودي ان اضعه على مستوى الفورم ولكن مش عارف كيف اغير الصيغة حتى يتلائم لانه هنا انا عامل ثلاث حركات وهي بعد الادخال وبعد عمل ابديت وبعد عمل ديليت ولكن في الفورم كل تريجرز لوحدة ِيعني زي كذا تجده في الفورم ِPOST-INSERT, POST-DELETE, POST-UPDATE فانا الصراحه ماعندي خلفية ووجدت كتابة التريجرز على مستوى قاعدة البيانات اسهل علي. على كل حال اذا عندك خلفية كيف نعمل تريجرز من داخل الفورم يكون افضل. على فكرة انا طبقت هذه الفكرة ووضعت جدول الاوديت لوج في الفورم واستطعت ان ارى التعديلات ولكن لااستطيع ان اعرف اسم اليوسر اللي غير. واذا كان لديك فكرة عن طريقة عمل اوديت للنظام كامل يكون افضل. لاني انا هنا فقط اريد ان اعمل فكرة مبسطة وهي على جدول واحد.فالان كل اللي بدي اضيفة اسم اليوسر الذي عملته في جدول اخر فكيف راح ينضاف في هذا التريجرزوشكرا لكم جميعا تم تعديل 18 أغسطس 200916 سنة بواسطة Only-Oracle تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.