زيادة ضبط لاجراء مخزن في قاعدة بيانات فايربيرد
#1
السلام عليكم ورحمة الله

كنت احاول الليلة السابقة ضبط احد الاجراءات المخزنة ليكون بشكل متالي اكثر
الاجراء كان يستخدم عدد اجراءين مخزنين واردت ان يكون في اجراء واحد فقط

السطور البرمجية كما بالشكل التالي:

كود :
begin For select     Sum(body.qin  -  body.qout) NEW_VAR ,     sanf.mname,     mitems.mname,     munit.mname,     munit.bye_level,     munit.cell_level from munit    inner join mitems on (munit.mindex = mitems.id)    inner join body on (mitems.id = body.items_no)    inner join sanf on (mitems.mindex = sanf.id) where( (munit.bye_level >= :NEW_VAR) ) group by sanf.mname, mitems.mname, munit.mname, munit.bye_level,munit.cell_level into :NEW_VAR, SANF_MNAME, MITEMS_MNAME,MUNIT_MNAME, BEY_LEVEL ,cell_level DO   suspend; end

لاحظوا اهم سطر هو والذي يقوم بحساب مدخلات البضاعة ومبيعاتها .

كود :
Sum(body.qin  -  body.qout) NEW_VAR ,


حقيقة لم يكن هناك متغير هنا والذي هو هنا NEW_VAR وانما هنا حاولت وقلت ربما يضع الناتج في متغير ولكن لم يفعل


فالمهم بالعملية كلها هنا

كود :
where( (munit.bye_level >= :NEW_VAR) )


حيث نطلب ان يقوم بفلترة البيانات التي لها حد الشراء يساوي او اكبر من كمية المشتريات - المبيعات
يعني المشتريات 1500 والمبيعات 1300 وحد الشراء 500 اذا
1500-1300=300 وحد الشراء لدينا 500 اذا يتحقق الشرط هنا في Where

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

كود :
where( (munit.bye_level >= Sum(body.qin  -  body.qout)) )

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

وجدت البعض يستخدم في فايربيرد شئ يسمى courses حيث يقوم باجراء عمليات علي القيم ولكن النسخة التي عندي ليس فيها هذه الميزة لاضافة شئ كهذا
فقط اسأل اذا مر على احدكم حل بسيط لذلك .
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
الرد
#2
احدى الطرق عدم استخدام عبارة where والقيام بالفلترة من المكون Table او Procedure وجاري البحث عن طرق اخرى
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
الرد
#3
السلام عليكم
حذف عبارة where
تغيير في procedure كما يلي :

كود :
DO BEGIN IF (munit.bye_level >= :NEW_VAR) THEN suspend END
بالتوفيق
[-] كل من 1 user says قال شكرا ل bahmani على المشاركة المفيدة
  • Delphi4Us
الرد
#4
السلام عليكم

أجل suspend ، حل بسيط و مثالي
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم