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

كود منع تسجيل بين فترتين للضروره

Featured Replies

بتاريخ:

ارغب في كود يعمل التالي
( لا يحصل المتدرب على أي دورة تدريبية تتعارض مع دورة تدريبية اخرى في نفس الوقت او تتقاطع معها)
حيث هناك حقلين في الجدول
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
رح يقبل
في احد عنده طريقه معينه وشكرا

بتاريخ:

ارغب في كود يعمل التالي
( لا يحصل المتدرب على أي دورة تدريبية تتعارض مع دورة تدريبية اخرى في نفس الوقت او تتقاطع معها)
حيث هناك حقلين في الجدول
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;



قم بالتجربة وأخبرني بالنتيجة

تم تعديل بواسطة Abdallah.Hasan

بتاريخ:

السلام عليكم

ارجو تجربة هذا الكود , حيث تم عمل تريجر على الجدول .....

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;

تم تعديل بواسطة malik alwadi

بتاريخ:

السلام عليكم

ارجو تجربة هذا الكود , حيث تم عمل تريجر على الجدول .....

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 وهو الحل الثاني
بالتوفيق




السلام عليكم

ارجو تجربة هذا الكود , حيث تم عمل تريجر على الجدول .....

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 وهو الحل الثاني
بالتوفيق



شكرا على كل من تفاعل مع الموضوع
جاري التجربه
بتاريخ:
  • كاتب الموضوع
ارغب في كود يعمل التالي ( لا يحصل المتدرب على أي دورة تدريبية تتعارض مع دورة تدريبية اخرى في نفس الوقت او تتقاطع معها) حيث هناك حقلين في الجدول 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%
وكذلك الفكره اكثر من رائعه
انار الله عقلك كما نورت عقولنا
والشكر موصول لكل من تفاعل
بتاريخ:

بالتوفيق اخي =))

  • بعد 3 أسابيع...
بتاريخ:
  • كاتب الموضوع

بالتوفيق اخي =))

شكرا استاذي لاني كنت منشغل بتسليم المشروع هل يمكن ان تشرح لي الكود الذي ساعدتني فيه
وكذلك ماوظيفة هذا التريجر والذي يقوم به (استخدم هذا الكود في 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;

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

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

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

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

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

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.