PrisonBreak بتاريخ: 5 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 5 أكتوبر 2009 السلام عليكمالى الذين لا يعلمون عن ماذا أتحدث : باختصار عندي قاعدة بيانات تحتوي على آلاف العمال وعدد كبير من العمال لهم تاريخ نهاية عقد ينتهي عملهم فيه ..أريد من الأوراكل عمل تفحص يومي لكل عامل له تاريخ نهاية عقد بحيث أن يقوم بتحويل الحالة العملية لجميع العمال الذي لديهم عقد من ( يعمل ) الى ( لا يعمل) عندما يساوي تاريخ نهاية عقدهم تاريخ اليومطلبت مساعدة من أخي PALI.ORACLE قبل ذلك وأخبرني بالحل ولكن ليس كاملا وأنا بحثت عن باقي الحل ووجدته ولكن الوظيفة لا تعملأطلب من أخي PALI.ORACLE مساعدتي أخي بالهل حل مشكلتي يكمن في هذه الأكواد وهل هي صحيحة وتحل مشكلتي أم لا أولا قمت بانشاء بروسيجر كالتالي Create Or Replace Procedure CHK_DATE AS CURSOR C IS SELECT LEAVEDATE FROM INF; BEGIN FOR REC IN C LOOP UPDATE INF SET WORK_STATE_CD = 2 WHERE LEAVEDATE = SYSDATE; END LOOP; COMMIT; End; حيث أن LEAVEDATE هو تاريخ نهاية العقد .. INF هو جدول العمالWORK_STATE_CD هو عمود الحالة العملية والذي يحتوي على خمسة خيارات ( "لا يعمل" هو الثاني من القائمة )ثانياً قمت بانشاء وظيفة كالتالي BEGIN -- Job defined entirely by the CREATE JOB procedure. DBMS_SCHEDULER.create_job ( job_name => 'CHK_DATEE', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN CHK_DATE(''CREATE_PROGRAM (BLOCK)''); END;', start_date => SYSTIMESTAMP, repeat_interval => 'freq=hourly; byminute=0', end_date => NULL, enabled => TRUE, comments => 'Job defined entirely by the CREATE JOB procedure.'); END; أنا قمت بتجربة ذلك وتمت عملية انشاء وظيفة وبروسيجر بنجاح ولكنها لم تعمل وبقيت التواريخ ولم تتم عملية تحويل الحالة العملية للعامل , سأكون شاكر جدا لمن يساعدنيأرجو أن تساعدوني بأقصى سرعة وللضرورة لأن مشروعي شارف على الانتهاء ولم يتبقى لي الا القليل .. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 5 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 5 أكتوبر 2009 (معدل) السلام عليكمجرب استخدام هذه الــ JOB : DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what => 'Chk_Date;' ,next_date => to_date('05/10/2009 17:04:05','dd/mm/yyyy hh24:mi:ss') ,interval => 'TRUNC(SYSDATE+1)' ,no_parse => FALSE ); SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); COMMIT; END; / تم تعديل 5 أكتوبر 2009 بواسطة PALI.ORACLE اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 5 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 أكتوبر 2009 السلام عليكمجرب استخدام هذه الــ JOB :DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what => 'Chk_Date;' ,next_date => to_date('05/10/2009 17:04:05','dd/mm/yyyy hh24:mi:ss') ,interval => 'TRUNC(SYSDATE+1)' ,no_parse => FALSE ); SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); COMMIT; END; / ما هي الآلية التي سيعمل بها هذا الكود أخي بال ..؟ومتى سيبدأ ومتى ستتم عملية التشييك ..؟قمت قبل قليل بتنفيذ الكود ولكن هل يجب علي الانتظار حتى الغد لملاحظة التغيير , اذا كانت الاجابة نعم فهل من طريق لاختباره الآن حتى لا أنتظر للغد حتى أعلم ما هي النتيجة . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.