الانتقال إلى المحتوى
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.

مساعدة فى Trigger When-radio-changed

Featured Replies

بتاريخ:

السلام عليكم 

انا دلوقتى عامل فورمه عبارة عن فاتورة مبيعات و عندى ايتم اسمه pay_type و دة عبارة عن radio group فيه (نقدا و اجل و... الخ)

و كتبت فيه التريجر دة 


begin
if :pay_type = 'cash'
then
update cash 
set cash.balance = cash.balance + :inv_detail.net_val;
update store_item
set store_item.quantity = store_item.quantity - :inv_detail.quantity
where inv_detail.item_code = store_item.item_code;
elsif
:pay_type = 'debit'
then update customer
   set customer.debit_val = customer.debit_val + :inv_detail.net_val;
end if;
end;
 

انا دلوقتى مشكلتى مش عارف اعمل شرط ال where
فى انه لما يروح ينقص كميه الاصناف (اللى فى الفاتورة) من المخزن عايزه ينقصها بناء على كود الايتم و كود المخزن اللى موجودين فى الفاتورة 
 

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

post-133302-0-21814800-1384896558_thumb.png

post-133302-0-57204600-1384896573_thumb.png

تم تعديل بواسطة ميسم الكرام

بتاريخ:

المشكلة لديك تكمن في هذا السطر 

set store_item.quantity = store_item.quantity - :inv_detail.quantity

وليست في شرط WHERE كما تعتقد ..
لا يمكنك طرح عمودين من جدولين مختلفين (هذا ما أعرفه عن لغة SQL في Oracle و SQL Server )

يمكنك حل هذه المشكلة برمجيا لاحقا ..
ولكن عليك تصحيح بعض الأخطاء في الجداول: 
1- من الخطأ أن يكون العمود item_code مفتاح رئيسي PK في جدول inv_detail ويجب أن يكون مفتاح ثانوي FK.
السبب : أن الفاتورة قد تتضمن أكثر من item في نفس الوقت (الزبون قد يطلب كيبوردات وشاشات في نفس الطلبية). 

2- يجب حذف العمود Item_name من جدول inv_detail .

السبب: لا داعي لتكرار البيانات ويمكنك عرض اسم الItem  والوصول إليه من خلال ربط الجدولين item و inv_detail في الاستعلام ...

 

 

من أجل الجداول store والجدول inv_headre والجدول inv_details .. لدي بعض الاستفسارات لكي أحاول أن أساعدك بالوصول إلى حالة أقرب للمثالية :

هل يمكن لزبون أن يشتري Items من مخازن مختلفة ؟

 

مثال: زبون يطلب 50 كيبورد من مخزن القاهرة .. ولكن مخزن القاهرة لا يحتوي إلا 30 كيبورد .. هل يمكن للزبون طلب 25 كيبورد المتوفرة في القاهرة وطلب 20 كيبورد أخرى من مخزن الاسكندرية مثلا؟

 

هناك بعض الأمور التي عليك معالجتها عند كتابة الTrigger مثل أن تتحقق من أن الكمية المطلوبة في الفاتورة أقل أو تساوي الكمية الموجودة في المخزن لكي لا تظهر لديك قيم سالبة ..
كالمثال الذي طرحته : الطلبية =50

الكمية المتوفرة في المخزن =30

الكمية المتبقية في المخزن بعد البيع = 30-50=(-20 ) وهي قيمة مرفوضة !

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

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

اما بالنسبه لسؤالك ف انا عايز دلوقتى مبدئيا اربط الفاتورة بمخزن وااحد يعنى الطلبيه كلها من مخزن واحد 
وبالنسبه لشرط ال where انا معرفتش اكتب فيه ايه اصلا :)  ف كتبت اى حاجه يعنى عشان اوضحلكو المشكله 

بتاريخ:

بس بالنسبه لموضوع ال pk انا عايز اليوزر ميختارش ايتم هو مختارة قبل كدة عشان متبقاش الفاتورة فيها نفس الايتم مرتين فقولت اعمله pk

 

حل هذه المشكلة يكون بوضع الItem_code  و INVD_INVD_SIRIAL مع بعضهم كمفتاح رئيسي مزدوج . 

 

 

 

الحل الأقرب للأمثلية  هو أن تربط الجداول كما في الصورة المرفقة ...

 

بالنسبة لتعديل الكمية الموجدودة في المخزن فلا أعتقد أنك تستطيع إجراء هذا التعديل مباشرة دون كود برمجي ..

 

أحد الحلول البرمجية هو أن تخزن كل الStore_Item_code  الموجودة في الفاتورة بمصفوفة مثلا أو List ولتكن SITC 

وأن تخزن كل الكميات من كل Item الموجودة في الفاتورة في مصفوفة أخرى مع مراعاة الترتيب ولتكن ITQ 

 

ومن ثم يتم تطبيق الTrigger ضمن حلقة 

Update Store_Item 

[sET quantity = quantity - ITQ[i

[WHERE store_item_code = [i 

post-131433-0-59048700-1384970043_thumb.jpg

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

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

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

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

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

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.