الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الخصم والاضافه عن طريق ترقر واحد فقط

مغلق
بدأه حد السيف في 12 يوليو 2003 · 4 رد · 790 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخونى واخوتي الاعضاء

لدى مشروع مستودعات وعملت ثلاث جداول وهى تسجيل عام لكل مايدخل في المستودعاته واسمه stors وجدول ثاني اسمه جدول الطلبيات وهو خاص بكل مايصرف من المستودع لااقسام المنشاءه وجدول اخر اسمه الاسترجاع وهو جدول خاص بكل مايرجع للمستودع من الاقسام

انا لدى في الجدول الاول stors

حقلين هما الكمية المصروفه والكميه الموجوده

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

طبعا عن طريق رقم الصنف الذى هو يعتبر مفتاح اى برايمري كي

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

STORS=اسم الجدول الذى تسجل في الاصناف الداخل للمستودع

FOUND_QUANTITY = الكمية الموجوده وهو تابع لجدول stors

DISBURSED_QUANTITY=الكمية المصروفه وهو تابع لجدول الطلبياتORDERS

CATEGORY_NO = رقم الصنف وهو مفتاح وموجود في الجدولين

PROCEDURE PINSERT IS

BEGIN

UPDATE STORS SET FOUND_QUANTITY = FOUND_QUANTITY - :ORDERS.DISBURSED_QUANTITY

WHERE :ORDERS.CATEGORY_NO = STORS.CATEGORY_NO;

UPDATE STORS SET DISBURSED_QUANTITY = DISBURSED_QUANTITY + :ORDERS.DISBURSED_QUANTITY

WHERE :ORDERS.CATEGORY_NO = STORS.CATEGORY_NO;

END;

ارجو ان يكون شرح المشكله وافي لكى نتمكن سويا من حلها ولكم منى جزيل الشكر مقدماً

#2
PROCEDURE PINSERT IS

BEGIN

UPDATE STORS SET FOUND_QUANTITY = FOUND_QUANTITY - :ORDERS.DISBURSED_QUANTITY

WHERE :ORDERS.CATEGORY_NO = STORS.CATEGORY_NO;

UPDATE STORS SET DISBURSED_QUANTITY = DISBURSED_QUANTITY + :ORDERS.DISBURSED_QUANTITY

WHERE :ORDERS.CATEGORY_NO = STORS.CATEGORY_NO;

END;

اسف نسيت ان اضع الكود في مربع الكودات

#3

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

#4

أنا أفضل إنك تستخدم trigger ال post-insert

UPDATE STORS SET 

FOUND_QUANTITY = FOUND_QUANTITY - :ORDERS.DISBURSED_QUANTITY,

DISBURSED_QUANTITY = DISBURSED_QUANTITY + :ORDERS.DISBURSED_QUANTITY

WHERE :ORDERS.CATEGORY_NO = STORS.CATEGORY_NO;

END;
#5

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

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

ونسميه PINSERT

PROCEDURE PINSERT IS

BEGIN

UPDATE STORS SET FOUND_QUANTITY = FOUND_QUANTITY - :ORDERS.DISBURSED_QUANTITY

WHERE :ORDERS.CATEGORY_NO = STORS.CATEGORY_NO

end;

END;

ونعمل بروسجر ثانى ونسميه اسم مختلف خلنا نقول مثلا

PINSERT1

PROCEDURE PINSERT1 IS

BEGIN

UPDATE STORS SET DISBURSED_QUANTITY = DISBURSED_QUANTITY + :ORDERS.DISBURSED_QUANTITY

WHERE :ORDERS.CATEGORY_NO = STORS.CATEGORY_NO;

END;

وبعدين نروح للبلوك الى نبى نعمل عليه الترقر ونضع ترقر على مستوى البلوك من نوع pre insert

ونكتب فيه

BEGIN

PINSERT

END;

BEGIN

PINSERT1

END;

وبكذا يتنفذ ينفذ الاول وينفذ الثانى بعدها اتمنى انكم استفدو من الطريقه هذى ويكون الشرح وافى واى استفسار انا تحت امركم

لكن بقت عندى مشكلة الاب ديت بحيث اذا عدلت على بيانات الجدول بالكمية المصروف يروح يعدلها ماتبقى ثابتها الى عنده طريقة عمل الاب ديت يعطينها

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

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…