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

عمل Trigger


hider

Recommended Posts

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

اخي الكريم

الـ trigger التالي يقوم بحذف السجل السابق قبل عملية ادخال السجل الجديد الذي يحتوي علي نفس الرقم الوظيفي

create  or  replace  trigger   t_emp   before  insert  on   emp   for  each  row
declare
id  number;
begin
select count(empno) into id  from  emp  where  empno = :new.empno;
if  id = 1 then
delete from  emp where empno = :new.empno;
end if ; 
end; 



حيث بهذه الطريقة سوف تفقد بيانات الموظف السابق الذي كان يحمل نفس الرقم الوظيفي

لذلك من الأفضل إنشاء جدول ثاني يتم فيه إدخال البيانات التي تم حذفها في الجدول الأول

إنشاء الجدول

copy from scott/1@orcl to scott/1@orcl create emp2 using SELECT * FROM  emp WHERE  empno = 0;



إدخال عمود جديد يحتوي علي تاريخ الحذف

ALTER  TABLE  emp2  ADD ( dat  date );




تعديل الـ trigger السابق كما يلي

create  or  replace  trigger   t_emp   before  insert  on   emp   for  each  row
declare
id  number;
begin
select count(empno) into id  from  emp  where  empno = :new.empno;
if  id = 1 then
insert  into  emp2 ( dat , EMPNO , ENAME , JOB , MGR , HIREDATE , SAL , COMM , DEPTNO ) 
select  sysdate , EMPNO , ENAME , JOB , MGR , HIREDATE , SAL , COMM , DEPTNO  from  emp   where empno = :new.empno;
delete from  emp where empno = :new.empno;
end if ; 
end; 



جزاك الله كل خير

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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