(02-08-2023, 09:20 AM)bouh25 كتب : ما المقصود بالسطر
inv1.availability =
في المثال الذي ارفقته
هذا أنت وضعته و لست أنا
حسب ما فهمت أنا من الكتابة التي وضعتها أنت :
1 ـ يوجد جدول مخزون رئيسي إسمه INVENTORY_FIRST يحتوي على الحقول التالية :
PRODUCT_ID INTEGER,
NOMPRODUIT VARCHAR(25),
QUANTITY_IN_STOCK NUMERIC(10,2),
AVAILABILITY VARCHAR(20)
2 - يوجد جدول ثانوي إسمه INVENTORY_SECOND يحتوي على الحقول التالية :
PRODUCT_ID INTEGER,
QUANTITY_IN_STOCK INTEGER
ـ في الجدول الثاني نقوم بإخراج سلع معينة وذلك من خلال PRODUCT_ID رقم المنتج المشترك بين الجدول الأول و الثاني ، لما نقوم بإنقاص السلع الموجدة في الجدول الثاني من الجدول الاول.
* ومنه في حالة عدم وجود هذه السلع في الجدول الأول يقوم بتحقق فقط بحيث يكتب الكمية غير كافية في الحقل
AVAILABILITY بدون إنقاصها
كود :
Merge into INVENTORY_FIRST as inv1
using (
select PRODUCT_ID, sum( quantity_in_stock ) as quantity_in_stock_2
from INVENTORY_SECOND
group by PRODUCT_ID
) inv2
on inv1.PRODUCT_ID = inv2.PRODUCT_ID and inv1.quantity_in_stock < quantity_in_stock_2
WHEN matched THEN
update set availability = 'الكمية غير كافية'
ـ بعد تنفيذ هذا سكريبت سيكتب في الجدول الرئيسي أمام الكمية المطلوبة "الكمية غير كافية"
ـ بواسطة سكريبت أخر يمكننا التحقق من ذلك
كود :
SELECT inv2.PRODUCT_ID, SUM( inv2.quantity_in_stock ) as quantity_Sortie, inv1.NOMPRODUIT, inv1.QUANTITY_IN_STOCK as en_Stock, inv1.AVAILABILITY
FROM INVENTORY_SECOND inv2
INNER JOIN INVENTORY_FIRST inv1 ON inv1.product_id = inv2.product_id
GROUP BY inv2.PRODUCT_ID , inv1.NOMPRODUIT, inv1.QUANTITY_IN_STOCK, inv1.AVAILABILITY
النتيجة
أما هذا السكريبت سيقوم بإنقاص الكمية إذا تحقق الشرط
كود :
Merge into INVENTORY_FIRST as inv1
using (
select PRODUCT_ID, sum( quantity_in_stock ) as quantity_in_stock_2
from INVENTORY_SECOND
group by PRODUCT_ID
) inv2
on inv1.PRODUCT_ID = inv2.PRODUCT_ID and inv1.quantity_in_stock >= quantity_in_stock_2
WHEN matched THEN
update set quantity_in_stock = quantity_in_stock - quantity_in_stock_2
نشرح سكريبت
بعد وضع سكريبت التحقق من الكمية و بعدها سكريبت التوضيح ستكون لدينا هذه الصورة
عند تنفيذ السكريب إنقاص الكمية ، انظر للسطر الملون بالأصفر تتوفر فيه شرط إنقاص الكمية ، أما السطر الذي قبله لا يمكن
# نشرح السطر الثاني في المربع رقم 1 هي الكمية الموجودة في الجدول الثاني INVENTORY_SECOND والتي تساوي 2 و المربع الثاني الكمية الموجودة في الجدول الرئيسي وتساوي 6 ، ومنه يمكن إنقاصها من المخزون الرئيسي
# أما السطر الذي قبل الكمية التي أخرجت أكبر من المخزنة في الرئيسي.
ملاحظة : عند الانتهاء من الانقاص يجب تغيير محتوى الحقل AVAILABILITY و هذا لإستعمال نتائجها مرة أخر وهذا كما يلي:
كود :
UPDATE INVENTORY_FIRST
SET AVAILABILITY = null
WHERE AVAILABILITY = 'الكمية غير كافية'
* وفي الأخير ، هذا مافهمت ، يمكن أن أكون مخطأ