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

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

صورة
- - - - -

عمل Trigger معتمد علي View


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

#1 esam_gm

esam_gm

    مشترك

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

تاريخ المشاركة 08 February 2011 - 10:44 AM

قمت بعمل trigger ولكن للاسف لا يعمل لانه معتمد علي View ولكن عند استبدال اسم الـ view بجدول يعمل بدون مشاكل
فهل لا يجوز التعامل مع لـ view في الـ trigger

وهذا هو الـ trigger
---------------------------------------------------------------------------------------

CREATE OR REPLACE TRIGGER INV.SS_I_QUN
AFTER UPDATE
ON INV.SALES_DETAIL 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
   n          number;
p_id_inv   NUMBER;
BEGIN

   SELECT id_inv
 	INTO p_id_inv
 	FROM sales_head
    WHERE id_sales = :NEW.id_sales;

   SELECT SUM (sum1)
 	INTO n
 	FROM garl_all 	--------------------------------------هذا عبارة عن view تقوم بحساب الرصيد ,وعند استبدالها باسم جدول تعمل بدون مشاكل
    WHERE id_item = :NEW.id_item AND id_inv = p_id_inv;

   insert into test2 (id_item) values (:old.i_qun);
   
   
END;


#2 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 13 February 2011 - 01:18 PM

only use instead of
CREATE OR REPLACE TRIGGER INV.SS_I_QUN 
INSTEAD OF UPDATE 
ON INV.SALES_DETAIL  
REFERENCING NEW AS NEW OLD AS OLD 
FOR EACH ROW 
DECLARE 
   n          number; 
p_id_inv   NUMBER; 
BEGIN 
 
   SELECT id_inv 
        INTO p_id_inv 
        FROM sales_head 
    WHERE id_sales = :NEW.id_sales; 
 
   SELECT SUM (sum1) 
        INTO n 
        FROM garl_all   --------------------------------------هذا عبارة عن view تقوم بحساب الرصيد ,وعند استبدالها باسم جدول تعمل بدون مشاكل 
    WHERE id_item = :NEW.id_item AND id_inv = p_id_inv; 
 
   insert into test2 (id_item) values (:old.i_qun); 
    
    
END;

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#3 esam_gm

esam_gm

    مشترك

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

تاريخ المشاركة 13 February 2011 - 01:41 PM

لا افهم ما هو الحل ، ارجو التوضيح

والغريب ان هذا التريجر trigger يعمل في insert وهذا هو
CREATE OR REPLACE TRIGGER inv.minus_inventory
   BEFORE INSERT
   ON inv.sales_detail
   REFERENCING NEW AS NEW OLD AS OLD
   FOR EACH ROW
DECLARE
   n          NUMBER;
   p_id_inv   NUMBER;
BEGIN
   SELECT id_inv
 	INTO p_id_inv
 	FROM sales_head
    WHERE id_sales = :NEW.id_sales;

   SELECT SUM (sum1)
 	INTO n
 	FROM garl_all
    WHERE id_item = :NEW.id_item AND id_inv = p_id_inv;

   IF n - (:NEW.i_qun-:NEW.mtb) < 0
   THEN
      raise_application_error ('', msg => 'stock on hand minus');
   END IF;
END;
/


#4 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 13 February 2011 - 02:42 PM

في حالة بناء تريجر على view
لابد من استخدام in stead of بدلا من before ,after

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#5 esam_gm

esam_gm

    مشترك

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

تاريخ المشاركة 15 February 2011 - 11:51 AM

الهدف من trigger هو اثناء عمل اي تعديل في جدول (المبيعات مثلا) في الكمية مثلا
يقوم بعمل بالبحث عن رصيد هذا الصنف من view اذا كان الرصيد بالسالب فيتم منع ذلك

هذا هو الهدف فالرجاء افادتي
ولسيادتكم جزيل الشكر

#6 esam_gm

esam_gm

    مشترك

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

تاريخ المشاركة 19 February 2011 - 08:20 PM

هل احد يستطيع ان يعطيني مثال
بحيث يستطيع ان يعمل select من view وهو يقوم بادخال داتا في table بحيث اذا كانت القيمة بالسالب يقوم بالغاء الادخال
  • Tech. Support معجب بهذا

#7 walid elsayed

walid elsayed

    عضو

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

تاريخ المشاركة 18 October 2012 - 11:41 PM

حضرتك ممكن تعمل جمله يسليكت عاديه لاسترجاع الكميه من الفيو بالنسبه للصنف اللى هتعمل عليه تعديل وهتقوله لو الكميه تساوى صفر ماتعملش تعديل او ماتعمل ادخال