تفظلوا شرح كيفيه تسجيل التغييرات التي يجريها المستخدمين على الجداول في حالة الاضافه و الحذف و التعديل السلام عليكم تحيه طيبه لجميع اعضاء المنتدى اليوم اشرح لكم كيفيه تتبع المستخدمين و تسجيل العمليات التي يجرونها على جداول قواعد البيانات من اضافه و حذف و تعديل حيث سوف نقوم بعمل برنامج يقوم بتسجيل القيم التي يعدلها المستخدمين القيم القديمه و القيم بعد التعديل و اسم المستخدم الذي قام التعديل و التاريخ. من اجل تتبع المستخدمين هناك طريقتين : الطريقه الاولى: من خلال عمل trigger في داخل قاعده البيانات يقوم بتتبع عمليات update و insert و delete و يكون العمل كما يلي: لناخذ الجدول WEATHER يحتوي اسم المدينه و درجه الحراره بها و درجه الرطوبه و طبيعه الطقس , كود انشاء الجدول و البيانات كما يلي افتح شاشه SQL*PLUS:
create user weather_software identified by aaa;
grant dba to weather_software;
connect weather_software/aaa@db1;
create table WEATHER (
City VARCHAR2(11),
Temperature NUMBER,
Humidity NUMBER,
Condition VARCHAR2(9)
);
insert into WEATHER values ('LIMA',45,79,'RAIN');
insert into WEATHER values ('PARIS',81,62,'CLOUDY');
insert into WEATHER values ('MANCHESTER',66,98,'FOG');
insert into WEATHER values ('ATHENS',97,89,'SUNNY');
insert into WEATHER values ('CHICAGO',66,88,'RAIN');
insert into WEATHER values ('SYDNEY',69,99,'SUNNY');
insert into WEATHER values ('SPARTA',74,63,'CLOUDY');
commit;
الان نقوم بانشاء جدول يقوم بتتبع التغيرات التي يجريها المستخدم يحتوي الجدول : اسم المستخدم و تاريخ العمليه و نوع العمليه و البيانات القديمه و البيانات الجديده ,كود انشاء هذا الجدول كما يلي:
create table WEATHER_TRACK (
User_name VARCHAR2(20),
Op_time timestamp,
Operation VARCHAR2(20),
City_old VARCHAR2(11),
Temperature_old NUMBER,
Humidity_old NUMBER,
Condition_old VARCHAR2(9),
City_new VARCHAR2(11),
Temperature_new NUMBER,
Humidity_new NUMBER,
Condition_new VARCHAR2(9)
);
الان نكتب كود انشاء الـ trigger المسؤول عن تتبع جدول weather وتسجيل التغييرات في جدول WEATHER_TRACK كما يلي :
CREATE OR REPLACE TRIGGER
"WEATHER_SOFTWARE"."TRIGGER_WEATHER_TRACK" BEFORE UPDATE OR DELETE
OR INSERT OF "CITY", "CONDITION", "HUMIDITY", "TEMPERATURE" ON
"WEATHER_SOFTWARE"."WEATHER" REFERENCING OLD AS old NEW AS new FOR
EACH ROW begin
if inserting then
insert into WEATHER_TRACK values
(user,sysdate,'Insert',:old.City,:old.Temperature,:old.Humidity,
:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);
elsif deleting then
insert into WEATHER_TRACK values
(user,sysdate,'Delete',:old.City,:old.Temperature,:old.Humidity,
:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);
elsif updating then
insert into WEATHER_TRACK values
(user,sysdate,'Update',:old.City,:old.Temperature,:old.Humidity,:old.Condition,
:new.City,:new.Temperature,:new.Humidity,:new.Condition);
end if;
end;
/
الان مع شرح الكود بالتفصيل: CREATE OR REPLACE TRIGGER انشء trigger جديد او قم باستبداله اذا كان موجودا. "WEATHER_SOFTWARE"."TRIGGER_WEATHER_TRACK" اسمه TRIGGER_WEATHER_TRACK BEFORE UPDATE OR DELETE OR INSERT يعمل قبل ان يتم تنفيذ جمل UPDATE و DELETE و INSERT OF "CITY", "CONDITION", "HUMIDITY", "TEMPERATURE" ON "WEATHER_SOFTWARE"."WEATHER" يعمل على حقول الجدول WEATHER REFERENCING OLD AS old NEW AS new FOR EACH ROW تمثل القيم القديمه بكلمه old و القيم الجديده new begin بدايه ال trigger if inserting then اذا كانت العمليه ادخال insert into WEATHER_TRACK values (user,sysdate,'Insert',:old.City,:old.Temperature,:old.Humidity, :old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition); قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK elsif deleting then اذا كانت العمليه مسح insert into WEATHER_TRACK values (user,sysdate,'Delete',:old.City,:old.Temperature,:old.Humidity, :old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition); قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK elsif updating then اذا كانت العمليه تعديل insert into WEATHER_TRACK values (user,sysdate,'Update',:old.City,:old.Temperature,:old.Humidity, :old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition); قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK end if; نهايه الجمله الشرطيه end; / نهايه كود الtrigger اذا اردنا عمل الtrigger من خلال الEnterprise Manager 10g يكون العمل كما يلي: صورة 1 صورة 2 صورة 3 صورة 4 صورة 5 صورة 6 صورة 7 صورة 8 والان من اجل فحص البرنامج نقوم بادخال و حذف و تعديل قيم في جدول Weather و من ثم نلاحظ كيف ان العمليات تم تسجيلاها في جدول WEATHER_TRACK اكتب التالي:
insert into WEATHER values ('LIMA',45,79,'RAIN');
update WEATHER set city='aa',Temperature=11,Humidity=5,Condition='FOG' where city='SPARTA';
delete from weather where city='PARIS';
commit;
select * from WEATHER_TRACK;
سوف يكون الناتج كما يلي: الطريقه الثانيه من خلال التطبيق سوف اتطرق لها في الدرس القادم ان شاء الله .