إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

مساعدة في حل مشكلة Overlap


4 رد (ردود) على هذا الموضوع

#1 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 02 June 2009 - 07:18 PM

السلام عليكم .
أيها الاخوة احتاج لمساعدتكم في حل مشكلة overlapping
لنفترض ان لدينا الاعمدة التالية :
LABORID رقم العامل الوظيفي
WROKID رقم عملية الاصلاح التي سيقوم بها
STARTTIME وقت البدء بعملية الاصلاح ( وقت وتاريخ)
ENDTIME وقت الانتهاء من عملية الاصلاح ( وقت وتاريخ )

الآن انا بحاجة للمساعدة بالتأكد من انه لا يوجد تداخل overlapping لدى العامل ، أي بعبارة أخرى لا يمكن عمليا ان يقوم بعمليتي اصلاح مثلا بنفس الوقت وطبعا يوجد لدي جدول به جميع التفاصيل المذكور سابقا واحتاج لأن اقارن واتأكد ان كل عامل لدي قد قام بعمل واحد فقط خلال وقت واحد اي انه وقت انتهاء عملية الاصلاح رقم واحد مثلا هو قبل تاريخ بداية عملية الاصلاح رقم اثنين لنفس العامل .

وعند حدوث تداخل او خطأ بالادخال ( كأن يبدأ عملية اصلاح جديدة قبل الانتهاء من عمله بعملية الاصلاح السابقة) يظهر لي جدول يخبرني برقم العامل ورقم عملية الاصلاح الاولى وبدايتها ونهايتها مع رقم عملية الاصلاح الثانية وبدايتها ونهايتها لاتأكد من وجود التداخل فعلا .




فهل من مجيب ؟؟؟؟؟


وجزاكم الله خيرا

#2 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 02 June 2009 - 08:21 PM

السلام عليكم
مبدئيا الدالة count هي هتحل لك المشكلة بمعنى انت بمعرفة رقم العامل هتعمل count له هل معه الان عملية اصلاح الان أم لا من خلال النتيجة لو = 1 سيتم معرفة ان معه عملية اصلاح
وبالنسبة للتواريخ والوقت هتقارن بينهم بجملة if
أعتقد لو هتستخدم الفورم هيكون الاجابة أوضح وأسهل
أم أنت تريد تريجر على مستوى الداتا بيز للقيام بهذه المهمة

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#3 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 03 June 2009 - 09:15 AM

السلام عليكم .
شكرا لك اخي مصطفى على الرد ، انا احتاج لمقارنة جميع مهام لدى العامل الواحد للتأكد من انه لم يستلم المهمة الجديدة قبل انتهائه من المهمة السابقة لها ، واحتاج لعمل ذلك على جدول يحتوى حوالي 11000 مهمة تقريبا ، ولا استطيع عمله كفورم ولكن اظن انه كتريجر سيكون هو الحل .
هل من الممكن ان تشرح الفكرة اكثر اخي الكريم ؟؟؟

المشكلة اني لست متقدما بمجال pl/sql بالدرجة الكافية

#4 feras Al-Jetawi

feras Al-Jetawi

    عضو

  • الأعضــاء
  • 4 مشاركة

تاريخ المشاركة 10 June 2009 - 09:00 PM

[يسار][/يسار]
select time,id
into v_time,v_id
from (select max(end_time) time ,work_id id
into dummy_time
from table-name
group by work_id)
where laborid=رقم العامل
if :time <dummy_time then
show_alert('alert_name','يوجد هناك عمل فى ساعة'||v_time ||'للموضف'||v_id||'مع'||:item name of emp||:time from canvas) ;
raise from_trigger_failure;
end if;
على كل حال هيدا هوا أبسط الحلول و إزا كان فى هنيك أي مشكل أنا جاهز للمساعدة و للسرعة بالرد ممكن المراسله على الإيميل التالي
feras.khader@duc.com.kw

#5 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 22 June 2009 - 11:11 AM

السلام عليكم .
لقد قمت بحل المشكلة عن طريق SELFJOIN بالكود التالي


SELECT A.LABORCODE AS LABORCODE, A.WORKID AS WORK_1, A.STARTDATE||' : '||TO_CHAR(A.STARTTIME,'HH24.MI')   AS START_TIME_1, A.FINISHDATE||' : '||TO_CHAR(A.FINISHTIME,'HH24.MI')   AS FINISH_TIME_1, B.WORKID AS WORK_2, B.STARTDATE||' : '||TO_CHAR(B.STARTTIME,'HH24.MI')   AS START_TIME_2,B.FINISHDATE||' : '||TO_CHAR(B.FINISHTIME,'HH24.MI')   AS FINISH_TIME_2
FROM LABTRANS A ,LABTRANS B
WHERE A.LABORCODE = B.LABORCODE AND A.FINISHDATE = B.STARTDATE AND A.STARTTIME < B.FINISHTIME AND A.FINISHTIME > B.STARTTIME AND A.WORKID<> B.WORKID AND A.LABORCODE = &LABORID;


حيث سيقوم بربط الجدول بنفسه ومقارنة القيم واظهار النتائج .