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

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

صورة
- - - - -

ارجو المساعدة Triggers


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

#1 amr50061

amr50061

    مشترك

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

تاريخ المشاركة 26 April 2009 - 01:32 PM

ارجو المساعدة عندى جدول الكميات
[/b]  
create table quantities
(
  item_id number(4,0) not NULL,
  quantity number(5) not null,
  constraint quant_pk primary key(item_id),
  constraint quant_items_fk foreign key(item_id)
  references items(item_id)
);

[b]

وجدول دخول المخزن
[/b]   
 create table st_in_orders_details
(
  st_in_dt_id number(6,0),
  store_in_order_id number(6,0) NOT NULL,
  item_id number(4,0) not NULL,
  quantity number(4,0),
  constraint st_in_ord_det_pk primary key(st_in_dt_id),
  constraint st_det_stin_ord_fk foreign key(store_in_order_id)
  references store_in_orders(store_in_order_id),
  constraint st_det_in_itemsps_fk foreign key(item_id)
  references items(item_id)
);
 
 [b]
المهم انا عاوز اعمل
DATABASE TRIGGER
اول ماادخل بيان الكمية تزيد
ولما اعدل الكمية لو زايدة تزيد زالعكس
ولما امسح بيان العدد بتاع الكمية اللى فيه ينقص

وفى حاجة تانية
لما اليوزر يدخل منتج جديد فى جدول المنتجات يدخل عندى الكميات =0


ولكم جزيل الشكر




#2 mustafagamiel

mustafagamiel

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

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

تاريخ المشاركة 27 April 2009 - 12:00 AM

الاخ الكريم
السلام عليكم ورحمة الله وبركاته
بالنسبة للسؤال ده

لما اليوزر يدخل منتج جديد فى جدول المنتجات يدخل عندى الكميات =0

طبعا من المفروض يكون عندك جدول في البداية الاي انت بتدخل فيه أرقام الاصناف وأسمائها على افتراض الاتي

create table items
(id number,
name varchar2(50));


وتريد عند ادخال المنتج الجديد مباشرة يضع رقم المنتج وكميته بصفر في جدول ال quantities
إذن سيكون في تريجر بسيط هو الاي هيعمل ده

create or replace trigger intem_isert
after insert on items
for each row
begin insert into quantities values (:new.id,0);


end;



وبالنسبة للسؤال الاخر
أولا القيود مرتبطة بجداول أخرى لم تذكرها ولذا لايتم إنشاؤها إلا إذا شيلت القيود
حسب مافهمت أنت تريد إدخال البيانات في جدول st_in_orders_details وتريد أن ترى التغيرات في جدول quantities سواء كانت إضافات أو حذف
بالنسبة للاضافة أو التعديل ستقوم بإنشاء هذا التريجر على جدول st_in_orders_details وإذا أضفت فيه بيانات ستجد عمل تعديل على قيمتها في جدول ال quantities

create or replace trigger quantity_update
after insert or update on st_in_orders_details
for each row
begin update quantities set quantity=quantity+:new.quantity where item_id=:new.item_id ;
end;



على أنه عندك relation وترتيب في إدخال البيانات
يعني تقوم بإدخال البيانات أولا في جدول ال items

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

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






#3 amr50061

amr50061

    مشترك

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

تاريخ المشاركة 27 April 2009 - 01:54 AM

اخى
mustafagamiel
الف شكر على اهتمامك وردك
انا فعلا عندى جدول ايتمز وكل ده ورفق الفورم والتابلز المهم انا كن عاوز اللى فى اول الموضوع عملت كدة بس الكود مش بيتنفز وغلبنى
انا عاوز اول لمااليوزر يدخل طلب دخول الكمية تزيد

ولما يعدل لو الكمية اتعدلت بزيادة عن الامر القديم تزيد فى المخزن ولو اقل الكمية تنقص
وكمان لو اليوزر مسح طلب كميته تقل من المخزن

وطبعا عكس الكود هايتعمل مع خروج من المخزن
ده الكود اللى عملته بي بيخرف


[/b]CREATE OR REPLACE TRIGGER Q_IN
 AFTER INSERT OR UPDATE OR DELETE
 ON ST_IN_ORDERS_DETAILS
 FOR EACH ROW
BEGIN
 IF INSERTING THEN
   UPDATE QUANTITIES  SET  
   QUANTITY  = QUANTITY + :NEW.QUANTITY	
					 WHERE  ITEM_ID=:OLD.ITEM_ID;
   -------------------------
 ELSIF UPDATING THEN
   IF  :NEW.QUANTITY > :OLD.QUANTITY THEN
	UPDATE QUANTITIES  SET  
	QUANTITY  = QUANTITY + :OLD.QUANTITY
					 WHERE  ITEM_ID=:OLD.ITEM_ID;
				 ------------------
   ELSIF  :NEW.QUANTITY < :OLD.QUANTITY THEN
	UPDATE QUANTITIES  SET  
	QUANTITY  = QUANTITY - :OLD.QUANTITY
					 WHERE  ITEM_ID=:OLD.ITEM_ID;
   END IF;
   -------------------------
 ELSIF DELETING THEN
	UPDATE QUANTITIES  SET  
   QUANTITY  = QUANTITY - :NEW.QUANTITY 
					WHERE  ITEM_ID=:OLD.ITEM_ID;
 END IF;
END;


[b]

ارجو الافادة انا مبتدا

ملفات مرفقة

  • ملف مرفق  fox_form.rar   258.35كيلو   36 عدد مرات التحميل


#4 mustafagamiel

mustafagamiel

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

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

تاريخ المشاركة 27 April 2009 - 08:36 AM

أخي الكريم حاول تجربة هذا بعد التعديل
CREATE OR REPLACE TRIGGER Q_IN AFTER INSERT OR UPDATE OR DELETE ON ST_IN_ORDERS_DETAILS
FOR EACH ROW
BEGIN IF INSERTING THEN
UPDATE QUANTITIES SET
QUANTITY = QUANTITY + :NEW.QUANTITY
WHERE ITEM_ID=:NEW.ITEM_ID;
-------------------------
ELSIF UPDATING THEN
IF :NEW.QUANTITY > :OLD.QUANTITY THEN
UPDATE QUANTITIES SET
QUANTITY = QUANTITY + (:NEW.QUANTITY-:OLD.QUANTITY)
WHERE ITEM_ID=:OLD.ITEM_ID;
------------------
ELSIF :NEW.QUANTITY < :OLD.QUANTITY THEN
UPDATE QUANTITIES SET
QUANTITY = QUANTITY +(:NEW.QUANTITY-:OLD.QUANTITY)
WHERE ITEM_ID=:OLD.ITEM_ID;
END IF;
-------------------------
ELSIF DELETING THEN
UPDATE QUANTITIES SET
QUANTITY = nvl(QUANTITY,0) + (nvl(:NEW.QUANTITY,0)-nvl(:OLD.QUANTITY,0))
WHERE ITEM_ID=:OLD.ITEM_ID;
END IF;
END;

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

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






#5 amr50061

amr50061

    مشترك

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

تاريخ المشاركة 06 May 2009 - 03:21 AM

اخى الكريم مصطفى

دى الاكواد مظبوطة تمام جربتها بس الكود بتاعك احسن اكيد ولنا استفدت منه

CREATE OR REPLACE TRIGGER Q_IN
 AFTER INSERT OR UPDATE OR DELETE
 ON ST_IN_ORDERS_DETAILS
 FOR EACH ROW
DECLARE
  QQ  NUMBER;
BEGIN
 IF INSERTING THEN
   UPDATE QUANTITIES  SET  
   QUANTITY  = QUANTITY + :NEW.QUANTITY	
					 WHERE  ITEM_ID=:NEW.ITEM_ID;
   -------------------------
 ELSIF UPDATING THEN
   IF  :NEW.QUANTITY > :OLD.QUANTITY THEN
	 QQ := :NEW.QUANTITY-:OLD.QUANTITY;
	UPDATE QUANTITIES  SET  
	QUANTITY  =:OLD.QUANTITY + QQ
					 WHERE  ITEM_ID=:NEW.ITEM_ID;
				 ------------------
   ELSIF  :NEW.QUANTITY < :OLD.QUANTITY THEN
	 QQ := :OLD.QUANTITY-:NEW.QUANTITY;
	UPDATE QUANTITIES  SET  
	QUANTITY  =:OLD.QUANTITY - QQ
					 WHERE  ITEM_ID=:NEW.ITEM_ID;
   END IF;
   -------------------------
 ELSIF DELETING THEN
	UPDATE QUANTITIES  SET  
   QUANTITY  = QUANTITY - :OLD.QUANTITY 
					WHERE  ITEM_ID=:OLD.ITEM_ID;
 END IF;
END;
=========================================================================

CREATE OR REPLACE TRIGGER Q_OUT
 AFTER INSERT OR UPDATE OR DELETE
 ON ST_OUT_ORDERS_DETAILS
 FOR EACH ROW
DECLARE
  QQ  NUMBER;
BEGIN
 IF INSERTING THEN
   UPDATE QUANTITIES  SET  
   QUANTITY  = QUANTITY - :NEW.QUANTITY	
					 WHERE  ITEM_ID=:NEW.ITEM_ID;
   -------------------------
 ELSIF UPDATING THEN
   IF  :NEW.QUANTITY > :OLD.QUANTITY THEN
	 QQ := :NEW.QUANTITY - :OLD.QUANTITY;
	UPDATE QUANTITIES  SET  
	QUANTITY  = QUANTITY - QQ
					 WHERE  ITEM_ID=:NEW.ITEM_ID;
				 ------------------
   ELSIF  :NEW.QUANTITY < :OLD.QUANTITY THEN
	 QQ := :OLD.QUANTITY - :NEW.QUANTITY; 
	UPDATE QUANTITIES  SET  
	QUANTITY  = QUANTITY + QQ
					 WHERE  ITEM_ID=:NEW.ITEM_ID;
   END IF;
   -------------------------
 ELSIF DELETING THEN
	UPDATE QUANTITIES  SET  
   QUANTITY  = QUANTITY + :OLD.QUANTITY 
					WHERE  ITEM_ID=:OLD.ITEM_ID;
 END IF;
END;
والف شكر على تجاوبك معى