إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

ترجرز مراقبة جدول


4 رد (ردود) على هذا الموضوع

#1 Only-Oracle

Only-Oracle

    مشترك

  • الأعضــاء
  • 56 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 18 August 2009 - 05:13 AM

السلام عليكم

عندي سوال بخصوص طريقة كتابة تريجرز جدولين وهذا التريجر يخص 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;
/


#2 abdu1_far

abdu1_far

    عضو نشط

  • الأعضــاء
  • 430 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 18 August 2009 - 09:03 AM

ممكن توضيح اكثر
ايه المطلوب بالظبط

تم التعديل بواسطة abdu1_far, 18 August 2009 - 09:04 AM.

قال رسول الله صلى الله عليه وسلم "إن لله عز وجل عباداً أختصهم بقضاء حوائج الناس ، حببهم إلي الخير وحبب الخير إليهم
هم الاّمنون من عذاب الله يوم القيامة " أوكما قال صلى الله عليه وسلم

#3 mah_yabroudy

mah_yabroudy

    عضو

  • الأعضــاء
  • 16 مشاركة

تاريخ المشاركة 18 August 2009 - 10:59 AM

اخي العزيز

سؤالك غير مفهوم
هل تريد عمل Auditing على النظام عن طريق الفورم مثلاً

ارجو التوضيح؟؟؟؟؟؟

#4 motasem

motasem

    مشترك

  • الأعضــاء
  • 87 مشاركة
  • الاسم الأول:MHD. Moutasem
  • اسم العائلة:Shkeir
  • البـلـد: Country Flag
  • المنصب الحالي:Senior Oracle Developer

تاريخ المشاركة 18 August 2009 - 04:19 PM

لا يمكنك وضع تريجر على جدولين بآن واحد لازم تعمل تريجر لكل جدول.

#5 Only-Oracle

Only-Oracle

    مشترك

  • الأعضــاء
  • 56 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 18 August 2009 - 04:52 PM

طيب انا راح اشرح بشكل اكثير

الان عندي جدول للمرضى اسم المريض الاول واسمه الثاني واللقب وايضا الايدي تبع المريض كما ترى في الترجرز اللي انا واضعه لك بالاول. الان انا لو بدي اعمل اوديت على هذا الجدول وبدي اعرف مين اللي حذف ومين اللي عمل ابديت ومين اللي عمل انسيرت على جدول المرضى وفي اي وقت اتعمل اي احد من هذه الترانسيكشن وفي اي يوم. طبعا انا عملت جدول وكما ترونة هنا بالاسفل

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 فانا الصراحه ماعندي خلفية ووجدت كتابة التريجرز على مستوى قاعدة البيانات اسهل علي. على كل حال اذا عندك خلفية كيف نعمل تريجرز من داخل الفورم يكون افضل. على فكرة انا طبقت هذه الفكرة ووضعت جدول الاوديت لوج في الفورم واستطعت ان ارى التعديلات ولكن لااستطيع ان اعرف اسم اليوسر اللي غير. واذا كان لديك فكرة عن طريقة عمل اوديت للنظام كامل يكون افضل. لاني انا هنا فقط اريد ان اعمل فكرة مبسطة وهي على جدول واحد.

فالان كل اللي بدي اضيفة اسم اليوسر الذي عملته في جدول اخر فكيف راح ينضاف في هذا التريجرز


وشكرا لكم جميعا

تم التعديل بواسطة Only-Oracle, 18 August 2009 - 04:56 PM.