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

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


esam_gm

Recommended Posts

قمت بعمل 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; 

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

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;         

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

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

والغريب ان هذا التريجر 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;
/ 

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

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

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

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

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

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

  • بعد 1 سنة...

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

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

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

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

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

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

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

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

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