بتاريخ: 14 يوليو 201213 سنة comment_226220 ارغب في كود يعمل التالي( لا يحصل المتدرب على أي دورة تدريبية تتعارض مع دورة تدريبية اخرى في نفس الوقت او تتقاطع معها)حيث هناك حقلين في الجدولCOURSE_SDATE , COURSE_SDATEقمت بعمل التاليDECLAREX VARCHAR2(10):=0;BEGINSELECT NVL(COUNT(EMP_ID),0) INTO X FROM TRANSWHERE EMP_ID=:EMP_IDAND ((COURSE_SDATE <= :COURSE_SDATEAND COURSE_EDATE >= :COURSE_SDATE)OR (COURSE_EDATE >= :COURSE_EDATE AND COURSE_SDATE <= :COURSE_EDATE)); IF X>0 THENMESSAGE('لايمكن التسجيل في دورتين بنفس الفتره');MESSAGE('لايمكن التسجيل في دورتين بنفس الفتره');وشغال تمام بس فيه ثغرهوهي في حالة تم التسجيل قبل فتره البدايه وبعد فتره النهايه يقبل وانا ابغاه يمنعيعني في حالة تم التسجيل في دوره1-3-2012 الى 1-4 -2012سواء كانت البدايه او نهايه الدوره الجديده واقعه بين هذه الفترتين راح يمنعلكن اذا سجل 1-2-2012 الى 2-4-2012رح يقبلفي احد عنده طريقه معينه وشكرا تقديم بلاغ
بتاريخ: 14 يوليو 201213 سنة comment_226221 ارغب في كود يعمل التالي( لا يحصل المتدرب على أي دورة تدريبية تتعارض مع دورة تدريبية اخرى في نفس الوقت او تتقاطع معها)حيث هناك حقلين في الجدولCOURSE_SDATE , COURSE_SDATEقمت بعمل التاليDECLAREX VARCHAR2(10):=0;BEGINSELECT NVL(COUNT(EMP_ID),0) INTO X FROM TRANSWHERE EMP_ID=:EMP_IDAND ((COURSE_SDATE <= :COURSE_SDATEAND COURSE_EDATE >= :COURSE_SDATE)OR (COURSE_EDATE >= :COURSE_EDATE AND COURSE_SDATE <= :COURSE_EDATE)); IF X>0 THENMESSAGE('لايمكن التسجيل في دورتين بنفس الفتره');MESSAGE('لايمكن التسجيل في دورتين بنفس الفتره');وشغال تمام بس فيه ثغرهوهي في حالة تم التسجيل قبل فتره البدايه وبعد فتره النهايه يقبل وانا ابغاه يمنعيعني في حالة تم التسجيل في دوره1-3-2012 الى 1-4 -2012سواء كانت البدايه او نهايه الدوره الجديده واقعه بين هذه الفترتين راح يمنعلكن اذا سجل 1-2-2012 الى 2-4-2012رح يقبلفي احد عنده طريقه معينه وشكرا السلام عليكماستخدم هذا الكود في POST-FORMS-COMMIT Trigger DECLARE v_count NUMBER := 0; BEGIN SELECT COUNT (1) INTO v_count FROM trans a, trans b WHERE a.emp_id = b.emp_id AND a.ROWID != b.ROWID AND ( a.course_sdate BETWEEN b.course_sdate AND b.course_edate OR b.course_sdate BETWEEN a.course_sdate AND a.course_edate ) AND a.emp_id = :emp_id; IF v_count > 0 THEN MESSAGE ('You can not insert courses with overlapping periods'); MESSAGE ('You can not insert courses with overlapping periods'); RAISE form_trigger_failure; END IF; END; قم بالتجربة وأخبرني بالنتيجة تم تعديل 14 يوليو 201213 سنة بواسطة Abdallah.Hasan تقديم بلاغ
بتاريخ: 15 يوليو 201213 سنة comment_226238 السلام عليكمارجو تجربة هذا الكود , حيث تم عمل تريجر على الجدول ..... Create Or Replace Trigger Malik Before Insert Or Update On Course For Each Row Declare Pragma Autonomous_Transaction; V_Count Number; Begin Select Count (1) Into V_Count From Course Where :New.From_Date Between From_Date And To_Date Or :New.To_Date Between From_Date And To_Date And :New.Emp_Id = Emp_Id;; If V_Count > 0 Then Raise_Application_Error (-20101, 'Not Allowed'); End If; End; تم تعديل 15 يوليو 201213 سنة بواسطة malik alwadi تقديم بلاغ
بتاريخ: 15 يوليو 201213 سنة comment_226239 السلام عليكمارجو تجربة هذا الكود , حيث تم عمل تريجر على الجدول ..... Create Or Replace Trigger Malik Before Insert Or Update On Course For Each Row Declare Pragma Autonomous_Transaction; V_Count Number; Begin Select Count (1) Into V_Count From Course Where :New.From_Date Between From_Date And To_Date Or :New.To_Date Between From_Date And To_Date And :New.Emp_Id = Emp_Id;; If V_Count > 0 Then Raise_Application_Error (-20101, 'Not Allowed'); End If; End; السلام عليكم ..الكود السابق الذي شاركه الاخ مالك سوف يمنع المستخدم من ادخال فترة ضمن الفترات السابقة فقط .. ولكن تبقى مشكلة عملية التسجيل قبل فترة البداية وبعد فترة النهاية!!!ولذلك قمت بالتعديل على الكود بحيث يمنعه من التسجيل قبل فترة البداية وبعد فترة النهاية .. وهنا التعديل CREATE OR REPLACE TRIGGER overlapping_tgr BEFORE INSERT OR UPDATE ON trans FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION; v_count NUMBER; BEGIN SELECT COUNT (1) INTO v_count FROM trans WHERE ( :NEW.course_sdate BETWEEN course_sdate AND course_edate OR :NEW.course_edate BETWEEN course_sdate AND course_edate ) OR ( course_sdate BETWEEN :NEW.course_sdate AND :NEW.course_edate OR course_edate BETWEEN :NEW.course_sdate AND :NEW.course_edate ) AND :NEW.emp_id = emp_id; IF v_count > 0 THEN raise_application_error (-20101, 'Not Allowed'); END IF; END; وهنا اخي (alnahdisami) سوف تجد حلين .. على مستوى Application وهو الحل الأول وعلى Database وهو الحل الثانيبالتوفيق تقديم بلاغ
بتاريخ: 15 يوليو 201213 سنة كاتب الموضوع comment_226241 السلام عليكمارجو تجربة هذا الكود , حيث تم عمل تريجر على الجدول ..... Create Or Replace Trigger Malik Before Insert Or Update On Course For Each Row Declare Pragma Autonomous_Transaction; V_Count Number; Begin Select Count (1) Into V_Count From Course Where :New.From_Date Between From_Date And To_Date Or :New.To_Date Between From_Date And To_Date And :New.Emp_Id = Emp_Id;; If V_Count > 0 Then Raise_Application_Error (-20101, 'Not Allowed'); End If; End; السلام عليكم ..الكود السابق الذي شاركه الاخ مالك سوف يمنع المستخدم من ادخال فترة ضمن الفترات السابقة فقط .. ولكن تبقى مشكلة عملية التسجيل قبل فترة البداية وبعد فترة النهاية!!!ولذلك قمت بالتعديل على الكود بحيث يمنعه من التسجيل قبل فترة البداية وبعد فترة النهاية .. وهنا التعديل CREATE OR REPLACE TRIGGER overlapping_tgr BEFORE INSERT OR UPDATE ON trans FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION; v_count NUMBER; BEGIN SELECT COUNT (1) INTO v_count FROM trans WHERE ( :NEW.course_sdate BETWEEN course_sdate AND course_edate OR :NEW.course_edate BETWEEN course_sdate AND course_edate ) OR ( course_sdate BETWEEN :NEW.course_sdate AND :NEW.course_edate OR course_edate BETWEEN :NEW.course_sdate AND :NEW.course_edate ) AND :NEW.emp_id = emp_id; IF v_count > 0 THEN raise_application_error (-20101, 'Not Allowed'); END IF; END; وهنا اخي (alnahdisami) سوف تجد حلين .. على مستوى Application وهو الحل الأول وعلى Database وهو الحل الثانيبالتوفيق السلام عليكمارجو تجربة هذا الكود , حيث تم عمل تريجر على الجدول ..... Create Or Replace Trigger Malik Before Insert Or Update On Course For Each Row Declare Pragma Autonomous_Transaction; V_Count Number; Begin Select Count (1) Into V_Count From Course Where :New.From_Date Between From_Date And To_Date Or :New.To_Date Between From_Date And To_Date And :New.Emp_Id = Emp_Id;; If V_Count > 0 Then Raise_Application_Error (-20101, 'Not Allowed'); End If; End; السلام عليكم ..الكود السابق الذي شاركه الاخ مالك سوف يمنع المستخدم من ادخال فترة ضمن الفترات السابقة فقط .. ولكن تبقى مشكلة عملية التسجيل قبل فترة البداية وبعد فترة النهاية!!!ولذلك قمت بالتعديل على الكود بحيث يمنعه من التسجيل قبل فترة البداية وبعد فترة النهاية .. وهنا التعديل CREATE OR REPLACE TRIGGER overlapping_tgr BEFORE INSERT OR UPDATE ON trans FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION; v_count NUMBER; BEGIN SELECT COUNT (1) INTO v_count FROM trans WHERE ( :NEW.course_sdate BETWEEN course_sdate AND course_edate OR :NEW.course_edate BETWEEN course_sdate AND course_edate ) OR ( course_sdate BETWEEN :NEW.course_sdate AND :NEW.course_edate OR course_edate BETWEEN :NEW.course_sdate AND :NEW.course_edate ) AND :NEW.emp_id = emp_id; IF v_count > 0 THEN raise_application_error (-20101, 'Not Allowed'); END IF; END; وهنا اخي (alnahdisami) سوف تجد حلين .. على مستوى Application وهو الحل الأول وعلى Database وهو الحل الثانيبالتوفيق شكرا على كل من تفاعل مع الموضوعجاري التجربه تقديم بلاغ
بتاريخ: 15 يوليو 201213 سنة كاتب الموضوع comment_226246 ارغب في كود يعمل التالي ( لا يحصل المتدرب على أي دورة تدريبية تتعارض مع دورة تدريبية اخرى في نفس الوقت او تتقاطع معها) حيث هناك حقلين في الجدول COURSE_SDATE , COURSE_SDATE قمت بعمل التالي DECLARE X VARCHAR2(10):=0; BEGIN SELECT NVL(COUNT(EMP_ID),0) INTO X FROM TRANS WHERE EMP_ID=:EMP_ID AND ((COURSE_SDATE <= :COURSE_SDATE AND COURSE_EDATE >= :COURSE_SDATE) OR (COURSE_EDATE >= :COURSE_EDATE AND COURSE_SDATE <= :COURSE_EDATE) ); IF X>0 THEN MESSAGE('لايمكن التسجيل في دورتين بنفس الفتره'); MESSAGE('لايمكن التسجيل في دورتين بنفس الفتره'); وشغال تمام بس فيه ثغره وهي في حالة تم التسجيل قبل فتره البدايه وبعد فتره النهايه يقبل وانا ابغاه يمنع يعني في حالة تم التسجيل في دوره 1-3-2012 الى 1-4 -2012 سواء كانت البدايه او نهايه الدوره الجديده واقعه بين هذه الفترتين راح يمنع لكن اذا سجل 1-2-2012 الى 2-4-2012 رح يقبل في احد عنده طريقه معينه وشكرا السلام عليكم استخدم هذا الكود في POST-FORMS-COMMIT Trigger DECLARE v_count NUMBER := 0; BEGIN SELECT COUNT (1) INTO v_count FROM trans a, trans b WHERE a.emp_id = b.emp_id AND a.ROWID != b.ROWID AND ( a.course_sdate BETWEEN b.course_sdate AND b.course_edate OR b.course_sdate BETWEEN a.course_sdate AND a.course_edate ) AND a.emp_id = :emp_id; IF v_count > 0 THEN MESSAGE ('You can not insert courses with overlapping periods'); MESSAGE ('You can not insert courses with overlapping periods'); RAISE form_trigger_failure; END IF; END; قم بالتجربة وأخبرني بالنتيجة اول مشاركه تمت تجربتهاشكرا على مجهودككود شغاااااااااال 100%وكذلك الفكره اكثر من رائعهانار الله عقلك كما نورت عقولناوالشكر موصول لكل من تفاعل تقديم بلاغ
بتاريخ: 4 أغسطس 201213 سنة كاتب الموضوع comment_226654 بالتوفيق اخي =)) شكرا استاذي لاني كنت منشغل بتسليم المشروع هل يمكن ان تشرح لي الكود الذي ساعدتني فيهوكذلك ماوظيفة هذا التريجر والذي يقوم به (استخدم هذا الكود في POST-FORMS-COMMIT Trigger)وشكراDECLARE\ v_count NUMBER := 0;BEGIN SELECT COUNT (1) INTO v_count FROM trans a, trans b WHERE a.emp_id = b.emp_id AND a.ROWID != b.ROWID AND ( a.course_sdate BETWEEN b.course_sdate AND b.course_edate OR b.course_sdate BETWEEN a.course_sdate AND a.course_edate ) AND a.emp_id = :emp_id; IF v_count > 0 THEN MESSAGE ('You can not insert courses with overlapping periods'); MESSAGE ('You can not insert courses with overlapping periods'); RAISE form_trigger_failure; END IF;END; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.