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

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

صورة
- - - - -

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


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

#1 hrs

hrs

    عضو نشط

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

تاريخ المشاركة 15 March 2010 - 11:39 AM

هل يمكن عمل تريجر على الفيو
حيث اذا تغير كولمن معين يترنن التريجر؟؟؟

#2 emadabdullah

emadabdullah

    مشترك

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

تاريخ المشاركة 16 March 2010 - 10:13 AM

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

أخي العزيز .. أبششرك إنه ممكن تعمل 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, 16 March 2010 - 10:15 AM.

Abdullah Emad
Oracle HRMS Techno-Functinal

#3 hrs

hrs

    عضو نشط

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

تاريخ المشاركة 17 March 2010 - 09:31 AM

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

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;


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

#4 hrs

hrs

    عضو نشط

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

تاريخ المشاركة 18 March 2010 - 09:41 AM

NO ONE CAN HELP!!

#5 abdou1984

abdou1984

    عضو نشط

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

تاريخ المشاركة 18 March 2010 - 03:22 PM

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

#6 el_saka

el_saka

    مشترك

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

تاريخ المشاركة 19 March 2010 - 12:13 AM

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

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

#7 hrs

hrs

    عضو نشط

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

تاريخ المشاركة 19 March 2010 - 06:09 AM

ماذا تعني بال
MATERLIZED VIEW??
وثانيا اذا متى نستطيع ان نستخدم INSTEAD OF
كما قال الاخ عماد عبدالله
لأني قرأت انها تستخدم للفيو

#8 el_saka

el_saka

    مشترك

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

تاريخ المشاركة 19 March 2010 - 01:31 PM

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

#9 el_saka

el_saka

    مشترك

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

تاريخ المشاركة 19 March 2010 - 01:39 PM

الجزء التاني من سؤالك وهي 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


#10 mostfa_future

mostfa_future

    عضو مميز

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

تاريخ المشاركة 19 March 2010 - 02:30 PM

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

تم التعديل بواسطة mostfa_future, 19 March 2010 - 02:33 PM.

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة