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

هل يمكن عمل تريجر على الفيو


hrs

Recommended Posts

بسم الله الرحمن الرحيم

أخي العزيز .. أبششرك إنه ممكن تعمل Trigger On View .

CREATE OR REPLACE TRIGGER Schema.Viewname
INSTEAD OF {Event Time :: INSERT | UPDATE | DELETE} ON Scema.Viewname 
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpVar NUMBER;

BEGIN tmpVar := 0;

  SELECT MySeq.NEXTVAL INTO tmpVar FROM dual;
  :NEW.Column1 := tmpVar;
  :NEW.Column2:= SYSDATE;
  :NEW.Column3:= USER;

  EXCEPTION
    WHEN OTHERS THEN
      -- Consider logging the error and then re-raise
      RAISE;
END ;
/

تم تعديل بواسطة emadabdullah
رابط هذا التعليق
شارك

تشكراتي لك اخي ..
لقد جربتها ولكن مامن نتيجة

create table T2
(
 OPERATION           VARCHAR2(1),
 USERNAME            VARCHAR2(225),
 TERMINAL            VARCHAR2(225),
 IPADDRESS           VARCHAR2(225),
 TIMESTAMP           VARCHAR2(225),
 OLD_BOKCDE          VARCHAR2(22),
 NEW_BOKCDE          VARCHAR2(22),
 OLD_RCV             NUMBER,
 NEW_RCV             NUMBER,
 OLD_BOKQTY          NUMBER,
 NEW_BOKQTY          NUMBER,
 OLD_SHELF           NUMBER,
 NEW_SHELF           NUMBER,
 OLD_ISA_SHELF       NUMBER,
 NEW_ISA_SHELF       NUMBER,
 OLD_SAKAIR_SHELF    NUMBER,
 NEW_SAKAIR_SHELF    NUMBER,
 OLD_EXIBITION_SHELF NUMBER,
 NEW_EXIBITION_SHELF NUMBER,
 OLD_SOLD            NUMBER,
 NEW_SOLD            NUMBER,
 OLD_CANCELED        NUMBER,
 NEW_CANCELED        NUMBER,
 OLD_SOLD_S          NUMBER,
 NEW_SOLD_S          NUMBER,
 OLD_SOLD_I          NUMBER,
 NEW_SOLD_I          NUMBER,
 OLD_SOLD_E          NUMBER,
 NEW_SOLD_E          NUMBER,
 OLD_DLVQTY          NUMBER,
 NEW_DLVQTY          NUMBER,
 OLD_REFUNDED        NUMBER,
 NEW_REFUNDED        NUMBER
)



create or replace trigger wss
 instead of insert or update-- of bokqty, shelf, sold, canceled, dlvqty, refunded on all1
 for each row

BEGIN If Updating Then
        insert into t2
     (Operation,UserName, Terminal,IPADDRESS, Timestamp,Old_bokcde,New_bokcde,Old_bokqty, New_bokqty,Old_rcv,New_rcv,
      Old_shelf,New_shelf, Old_isa_shelf,New_isa_shelf, Old_sakair_shelf, New_sakair_shelf,Old_exibition_shelf,New_exibition_shelf,Old_sold,New_sold ,Old_canceled,New_canceled,Old_sold_s,New_sold_s,Old_sold_i,New_sold_i,Old_sold_
e,New_sold_e,Old_dlvqty,New_dlvqty,Old_refunded,New_refunded)
   values
     ('U',User,UserEnv('TERMINAL'),Trim(Sys_Context('USERENV', 'IP_ADDRESS')),
      SysDate,:Old.bokcde,:New.bokcde,:Old.bokqty,:New.bokqty,:Old.rcv,:New.rcv,
      :Old.shelf,:New.shelf, :Old.isa_shelf,:New.isa_shelf, :Old.sakair_shelf, :New.sakair_shelf,:Old.exibition_shelf,:New.exibition_shelf,:Old.sold,:New.sold ,:Old.canceled,:New.canceled,:Old.sold_s,:New.sold_s,:Old.sold_i,:New.sold_i,:Ol
d.sold_e,:New.sold_e,:Old.dlvqty,:New.dlvqty,:Old.refunded,:New.refunded);

  elsif inserting then
         insert into t2
     (Operation,UserName, Terminal,IPADDRESS, Timestamp,Old_bokcde,New_bokcde,Old_bokqty, New_bokqty,Old_rcv,New_rcv,
      Old_shelf,New_shelf, Old_isa_shelf,New_isa_shelf, Old_sakair_shelf, New_sakair_shelf,Old_exibition_shelf,New_exibition_shelf,Old_sold,New_sold ,Old_canceled,New_canceled,Old_sold_s,New_sold_s,Old_sold_i,New_sold_i,Old_sold_
e,New_sold_e,Old_dlvqty,New_dlvqty,Old_refunded,New_refunded)
   values
     ('U',User,UserEnv('TERMINAL'),Trim(Sys_Context('USERENV', 'IP_ADDRESS')),
      SysDate,:Old.bokcde,:New.bokcde,:Old.bokqty,:New.bokqty,:Old.rcv,:New.rcv,
      :Old.shelf,:New.shelf, :Old.isa_shelf,:New.isa_shelf, :Old.sakair_shelf, :New.sakair_shelf,:Old.exibition_shelf,:New.exibition_shelf,:Old.sold,:New.sold ,:Old.canceled,:New.canceled,:Old.sold_s,:New.sold_s,:Old.sold_i,:New.sold_i,:Ol
d.sold_e,:New.sold_e,:Old.dlvqty,:New.dlvqty,:Old.refunded,:New.refunded);

 end if;
end wss;



اذا امكنكم المساعدة

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

السلام عليكم ورحمة الله وبركاته
يجب العلم بان View فى الاول والاخر عبارة عن جملة استعلام Query .
اذا كان لديك Trigger يمكنك عمله على Tables
------------------------------------------------------------------------------------------------

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

طبعا لا يمكن عم لtrigger على view لان ال view باختصار لاتحتوي على اي data بل هي منظور تنظر به على table معين

في المقابل يمكن عمل trigger على materalized view لانها تحتوي على data

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

ال materalized view هي ناتج استعلام لداتا موجودة في داتا بيز خارجية اي انها استعلام على table موجود في داتا بيز خارجية ولكن هذا النوع من ال view يحتوي على داتا
معلش يا اخي لو كان الكلام مش مفهوم اوي لاني مش بعرف اشرح كويس
for more information
see this link
http://www.databasejournal.com/features/or...s-in-Oracle.htm

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

الجزء التاني من سؤالك وهي instead of
هي فعلا تستخدم على ال view
لكن ليس لتحديث ال view
ولكن لتحديث الtable المعتمد عليها ال view

وده مثال

create or replace view outemp as select  EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,dname
from emp e ,dept d where d.deptno = e.deptno



ثم عمل التحديث على الجداول المعتمد عليها الفيو

create or replace trigger update_emp_thru_outemp_view
instead of update on outemp
referencing new as new
begin update emp 
     set ename = :new.ename,
empno = :new.empno,
job = :new.job,
mgr = :new.mgr,
hiredate = :new.hiredate,
sal = :new.sal,
comm = :new.comm,
deptno = ( select deptno from dept where dname = :new.dname )
where empno = :old.empno;
    if ( sql%rowcount = 0 )
      then
        raise_application_error
         ( -20001, 'Error updating the outemp view !!!' );
    end if;

end

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

مع احترامى لكل الاراء ينفع تعمل تريجر على vew طبعا !!!!!!!!!!!!!!!!!!!!!
لو مينفعش امال نوع تريجر بيستحدم فى ايه INSTEAD OF ده بيستخدم مع complex views
وطبعا انا مش هقدر اوصل المعلومه زاى الماتربل الموضع موجد فى الدرس العاشره فى اخر 5 صفح تقريبا ماتريل pl
و بالتوفيق

تم تعديل بواسطة mostfa_future
رابط هذا التعليق
شارك

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

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

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

×   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.

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

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

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