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

كيفية عمل هذه ال Job

Featured Replies

بتاريخ:

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

طلبت مساعدة من أخي AHMAD.HASAN قبل ذلك وأخبرني بالحل ولكن ليس كاملا وأنا بحثت عن باقي الحل ووجدته ولكن الوظيفة لا تعمل

أطلب من أخي AHMAD.HASAN مساعدتي 

أخي احمد
هل حل مشكلتي يكمن في هذه الأكواد وهل هي صحيحة وتحل مشكلتي أم لا

أولا قمت بانشاء بروسيجر كالتالي

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;

أنا قمت بتجربة ذلك وتمت عملية انشاء وظيفة وبروسيجر بنجاح ولكنها لم تعمل وبقيت التواريخ ولم تتم عملية تحويل الحالة العملية للعامل , سأكون شاكر جدا لمن يساعدني
أرجو أن تساعدوني بأقصى سرعة وللضرورة لأن مشروعي شارف على الانتهاء ولم يتبقى لي الا القليل ..

بتاريخ:

السلام عليكم

اخي العزيز المشكلة لديك في الشرط

WHERE LEAVEDATE = SYSDATE;

حيث انك تقارن تاريخ بتاريخ اليوم

والمشكلة كالتالي انت تقارن تاريخ ووقت بتاريخ ووقت

كما نعلم ان التاريخ يحفظ في قاعدة البيانات على صيغة تاريخ ووقت وهنا نحن بحاجة الى تحويل صيغة التاريخ لتتم عملية المقارنة بشكل صحيح

لذا يصبح الشرط كالتالي

WHERE to_date(LEAVEDATE,'dd-mm-yyyy') = to_date(SYSDATE,'dd-mm-yyyy');

بتاريخ:

السلام عليكم

بدلا من استخدام الكيروسر وهو بطىء وخصوصا اذا كان عدد السجلات كبير
اقترح تعديل الوظيفة الى الشكل التالى

Create Or Replace Procedure CHK_DATE AS 
BEGIN 
UPDATE INF 
SET WORK_STATE_CD = 2 
WHERE to_date(LEAVEDATE,'dd-mm-yyyy') = to_date(SYSDATE,'dd-mm-yyyy');
COMMIT;
End;

بتاريخ:

السلام عليكم
اضافة الى كلام اخواني الاعزاء
يمكن عمل ال job مباشرة حيث انه لايستدهي عمل البروسيدور لانه جملة ال update تكفي في سطر واحد
2- المفروض يتم تعديل لما يكون تاريخ اليوم أكبر من تاريخ نهاية العقد لان الموظف يظل يدوام لاخر يوم في العقد اليس كذلك
3- بالنسبة لاخي العزيز جاد لايشترط التحويل لانه الاوراكل يقوم بعمل تحويل داخلي ويفهم ويقارن صحيح هذا طالما ان نوع العمود في الجدول عندك من النوع date بينما لو كنت تخزن التاريخ في عمود ليس نوعه date مثلا number or varchar2 في هذه الحالة لابد من عمل ماقام به أخي العزيز جاد

يمكنك عمل مثل هذه ال job

BEGIN DBMS_SCHEDULER.CREATE_JOB(
   job_name => 'update_table',
   job_type => 'PLSQL_BLOCK',
   job_action => 'begin UPDATE INF SET WORK_STATE_CD = 2 WHERE LEAVEDATE > SYSDATE; end;',
   start_date => SYSTIMESTAMP,
   repeat_interval=>'FREQUENCY=daily ;INTERVAL=1',
   enabled => TRUE);
END;
/



هذه الوظيفة ستعمل يوميا
لكن قبل انشأها لابد وان تتأكد ان المستخدم الذي تعمل عليه له القدرة على انشاء الوظيفة لو غير ذلك هتخش من المستخدم sys

/as sysdba



grant create any job to scott;




وفق الله الجميع

بتاريخ:

السلام عليكم
سبقني أخي العزيز مصطفى جميل في الرد...
وجوابه صحيح ودقيق 100 % ...

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

جرب هذه الجوب:

BEGIN DBMS_SCHEDULER.CREATE_JOB(
job_name => 'update_table',
job_type => 'PLSQL_BLOCK',
job_action => 'UPDATE INF SET WORK_STATE_CD = 2 WHERE LEAVEDATE > SYSDATE;',
next_date => to_date('05/10/2009 17:04:05','dd/mm/yyyy hh24:mi:ss'),
repeat_interval=>'FREQUENCY=daily;INTERVAL=1',
enabled => TRUE);
END;
/



لاحط ان وقت عمل الجوب هو17:04:04 ..
جرب تغيير الوقت...

بتاريخ:
  • كاتب الموضوع

ألف شكر لكل من ساعدني ولمن حاول مساعدتي
شكرا جاد , شكرا asmaa
وشكر خاص وخاص جدا لأخي مصطفى وأخي احمد على المساعدة الكبيرة والكبيرة جداً
قمت بتجربة الوظيفة وتمت العملية بنجاح
أقول لأخي احمد بأنني قمت بتغيير القيمة repeat_interval=>'FREQUENCY=daily;INTERVAL=1', الى repeat_interval=>'FREQUENCY=minutely', حتى يقوم باستدعاء الوظيفة كل دقيقة وليس كل يوم وهكذا قمت بتجربتها وبعد عملية التجريب قمت بارجاعها الى التشييك اليومي وليس كل دقيقة ونستطيع أن نستدعي الوظيفة كل ساعة أيضا عن طريق repeat_interval => 'freq=hourly; byminute=0',

أخي احمد , أخي مصطفى
خطرت ببالي فكرة أريد أن أفاجئ بها من يهمهم أمر مشروعي
هل يمكن أن أقوم بعملية باك أب ( نسخة احتياطية ) تلقائيا ووضعها في مكان أقوم أنا بتحديده في الكود يتم عمل هذا كله عن طريق الجوب ولتكن كل أسبوع weekly وتكون تلقائية التشغيل
هل يمكن ذلك أنا أعلم أنه يمكن ولكن كيف ذلك ..؟
شكرا لكم جميعاً
تحياتي

بتاريخ:

نعم يمكن ذلك...
ان البعض يستخدم الــ job schudual الموجودة من ضمن خصائص الويندوز .... ولكنني لم اقم بتجربتها...

بتاريخ:
  • كاتب الموضوع

سأقوم بتجربتها الآن أخي احمد ..
ولكن هل التصدير عن طريق جملة exp يكفي أم هناك تصدير آخر عن طريق جمل أخرى ..؟

بتاريخ:

السلام عليكم
بالنسبة

هل يمكن أن أقوم بعملية باك أب ( نسخة احتياطية ) تلقائيا ووضعها في مكان أقوم أنا بتحديده في الكود يتم عمل هذا كله عن طريق الجوب ولتكن كل أسبوع weekly وتكون تلقائية التشغيل


لايصح وضع جملة export مباشرة مكان جملة ال update في ال job السابقة لان جملة ال export ليست جملة sql فلايتم تنفييذها

ممكن كما قال أخي أحمد "pali" عمل سكيدول بالويندوز يوميا -شهريا عن طريق باتش

اعتقد أيضا ممكن هناك طريقة أخرى لكن لا اعرف
موفق
بتاريخ:

السلام عليكم

اخي mustafagamiel اريد ان اوضح لك

كما نعلم انه لو قمنا بعمل حقل من نوع date فإنه سيحتفض بالقيم بداخله على صيغة وقت وتاريخ ... وهذا شيء معروف

لكن الذي لا تعلمه هو

لو قمنا بإضافة بيانات لهذا الحقل عن طريق فورم وكان القيمة المدخلة هي
10-10-2009
فإن هذه القيمة ستحفظ في قاعدة البانات على هذا الشكل

10-10-2009 12:00:00 pm

ولو قام الاخ طارح السؤال بتنفيذ الوظيفة المطلوبة يوميا الساعة 10 صباحأ او اي وقت غير الساعة 12:00:00 pm

فإن الشرط لدية لن يتحقق لان هذه القيمتين غير متساوية
علما بأنه يقارن عن طريق المساواه بين القيمتين

لذلك لا بد من مقارنة قيمتين متشابهتين بالتنسيق لنحصل على النتيجة ونهمل القيمة الزمنية كما شرحتها لكم
 

بتاريخ:

السلام عليكم
لو قمت بعمل التالي:

SELECT SYSDATE FROM DUAL;



ماذا سيكون الناتج ؟؟ ... اكيد تاريخ اليوم فقط...

قمت بعمل جدول وادخلت تاريخ من الفورم وعند عمل سيليكت على الداتا بيز ظهر التاريخ فقط بدون وقت ....

بصراحه اخ جاد..شككتني بحالي B)

post-73694-1254863363_thumb.jpg

بتاريخ:

الأخ jadquraan
كلامي بعيد عن الموضوع قليلاً
ياأخي إذا كان عندك زيادة علم فأخبرنا لكن بدون تجريح للأشخاص بمثل ألفاظ( تتعاملون بشكل سطحي وتتسرعون في الإجابة)
فمثل هذه الطريقة تنفر القلوب من بعضها
رجاء احذف من قاموسك هذه الألفاظ
دمتم بعافية

  • بعد 4 سنة...
بتاريخ:

موضوع مميز استفدت منه بشكل كبير

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

بتاريخ:

 

بجد موضوع مميز استفدت جدا و جزاكم الله خيرا جميعا

 

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

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

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

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

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

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.