الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

ارجو المساعدة عندى جدول الكميات

[/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


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


بتاريخ:

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

لما اليوزر يدخل منتج جديد فى جدول المنتجات يدخل عندى الكميات =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

بتاريخ:
  • كاتب الموضوع

اخى
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

بتاريخ:

أخي الكريم حاول تجربة هذا بعد التعديل

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;

  • بعد 2 أسابيع...
بتاريخ:
  • كاتب الموضوع

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

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

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;


والف شكر على تجاوبك معى

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.