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

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

صورة
- - - - -

أضافة علاوة كل سنة


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

#1 سلطان الحارثي

سلطان الحارثي

    مشترك

  • الأعضــاء
  • 90 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 29 August 2006 - 11:19 AM

السلام عليكم ورحمة الله وبركاته
اريد دالة تعمل الأتي :
تزيد على الرتب العلاوة السنوية 200 ريال عندما يكمل الموظف سنة من تاريخ التعيين في جدول الموظفين.
تاريخ تعيين الموظف 1/8/1425
هل ممكن ؟؟
اسم الجدول emp
رقم الموظف empno
اسم الموظف empname
تاريخ التعيين constart
الراتب salary

مع العلم ان عمود التاريخ من نوع number عدد خاناتة 8
يمكن استخدام دالة substr ؟

ارجو ان اكون اوظحت المشكلة

#2 hobaa

hobaa

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 980 مشاركة

تاريخ المشاركة 29 August 2006 - 12:21 PM

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

هى ممكن تكون مش صح اوى بس انت ممكن تظبطها

ايهاب وجدى


Oracle Developer

Oracle DBA
Oracle Instructor

Egypto-Soft



#3 محمد علي الحيلان

محمد علي الحيلان

    مشترك

  • الأعضــاء
  • 82 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 29 August 2006 - 12:59 PM

عزيزي سلطان الحارثي
السلام عليكم ورحمة الله وبركاته:-
اولا- هل عندما تجلب تاريخ الجهاز الى برنامجك هجري – ام ميلادي
ا ذا كان ميلادي لابد من تحويله اولا الى هجري حيث توجد داله في المنتدى تعمل التحويل
بعدة طرق0
اذا الكلام على اساس انه عربي:-
حول التاريخ الى رقم هكذا
حقل تاريخ الجهاز الذي اتفقنا على انه هجري اسمه date1 امامنا هكذا 01/08/1425
Declare
DATE_date number(8);
begin
:GLOBAL.DATE_date :=substr(:DATE1,1,4) *354 + substr(:DATE1,6,2)* 30 + substr(:DATE1,9,2)* 1;
exception
when VALUE_ERROR then null;
end;
اذا حولنا تاريخ الجهاز الهجري الذي اسمه date1 الى رقم واصبح عام واسمه GLOBAL.DATE_date
ثانيا - أعمل المقارنه بينه وبين الحقل في الجدول emp واسمه constart
واعتقد ان المقارنه سهله جدا
بالتوفيق ياخي ،،،،،،،،،
لااله الا الله محمد رسول الله

#4 basilt

basilt

    مشترك

  • الأعضــاء
  • 90 مشاركة
  • الاسم الأول:b
  • اسم العائلة:t
  • البـلـد: Country Flag
  • الاهتمامات:Reading
    Sports
    Football
    Oracle Projects

تاريخ المشاركة 02 September 2006 - 11:50 AM

السلام عليكم "

صديقي سلطان, انت بحاجة هنا الى 3 أمور :
1) فنكشن او شاشة مستقلة تعمل لها تنفيذ لتعمل على زيادة راتب الموضفين الذين يستحقون ذلك بمقدار الزيادة 200 ريال .

2) اضافة عمود جديد يمثل تاريخ اخر زيادة لنسمه مثلا Last_increase_salary . و في البداية قبل تشغيل البرنامج وتنفيذ الفنكشن يجب ان يكون هذا الحقل الجديد يحتوي على اخر تاريخ الزيادة لجميع الموظفين , لأننا سوف نستخدمه لاحقا لتحديد ان الموظف متى تم اخذ اخر زيادة له ثم اذا كان يستحق هذة الزيادة عمل update على التاريخ ووضع تاريخ الزيادة الجديدة .. وهكذا على مستوى كل موظف , وكذلك في كل سنة .

3) عرف item على الفنكشن وادخل به تاريخ الزيادة السنوية لشهر معين . لنسمه enter_increase_date ثم ..
طبعا في داخل الفنكشن عمل cursor على أرقام الموظفين , شرط ان يكون الفرق بينهما سنة Last_increase_salary- enter_increase_date = 1 year

أذا تحقق الشرط اعمل

,update emp set salary = salary +200
Last_increase_salary = Last_increase_salary + 1 year
where empno = i.empno

وفقط ..
بذلك تكون حققت الزيادة المطلوبة للموظف في كل سنة بموعدها .

والسلام عليكم .
OCP Oracle Certified Professional Developer

صورة
Oracle HRMS Implementer
Analyst /Business HR Package Systems

#5 أبو الروض

أبو الروض

    عضو نشط

  • الأعضــاء
  • 327 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:ب

تاريخ المشاركة 02 September 2006 - 10:23 PM

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

فقط أريد أن أعطيك الجداول والباكيج المسويه ولكن أن خارج مدينة الرياض
فقط أمهلني 5 أيام لحين العودة وإن شاء الله لن أبخل عليك

ولكن لاتنسى الدعاء حتى ذلك الحين

والله الموفق

#6 أبو الروض

أبو الروض

    عضو نشط

  • الأعضــاء
  • 327 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:ب

تاريخ المشاركة 05 September 2006 - 11:24 AM

أولا : قم بإضافة حقلين في الجدول الرئيسي وهما
 INCREMENT_FLAG_AFTER     NUMBER(5)
YEAR_ID  NUMBER(5);

وتقوم بعمل بروسيجر يعمل رن أتوماتيكي بحيث يعمل UPDATE كل سنة ويضع لكل موظف
وهكذا عند مناداة الأشخاص كل سنة تقوم بعمل UPDATE لتغيير السنة إلى السنة الحالية

أما الحقل الأول INCREMENT_FLAG_AFTER فعند تحويل السنة تكون القيمة 1
وعند منح الموظفين علاوة تتحول إلى 2

فبهذه الحالة عند مناداة البروسيجر لعمل علاوة تقوم بمناداة السنة والحالة تكون 1
وعكس ذلك لايقوم بالمناداة

وإليك البوسيجر الذي يقوم بعمل كل الذي ورد أعلاه


CREATE OR REPLACE PROCEDURE SET_NEW_YEAR
  IS
       CURSOR C1 IS SELECT year_id  FROM HR_PERSONS  ;
 --    REC       C1%ROWTYPE;
         v_year_id   number;
  V_DATE    NUMBER;
  V_DATE_ARABIC       NUMBER;
  BEGIN
   SELECT TO_NUMBER(TO_CHAR(SYSDATE,'YYYY','NLS_CALENDAR=''arabic Hijrah'''))  INTO V_DATE
   FROM DUAL;
      OPEN C1;
    LOOP
    FETCH C1 INTO v_year_id;
       IF v_year_id <>  V_DATE  THEN
          UPDATE HR_PERSONS SET YEAR_ID = V_DATE;

        UPDATE HR_PERSONS SET INCREMENT_FLAG_AFTER = 1;
        END IF;
   EXIT WHEN C1%NOTFOUND;
  END LOOP;
   CLOSE C1;
 COMMIT;
  END;

:( :D

#7 haas78

haas78

    عضو

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

تاريخ المشاركة 07 September 2006 - 11:32 AM

ابو الروض حبيبي
لازم يكون موقع االاكزت كوندشن بعد ما تعمل فش من الكيرزور
وشكراً


أولا : قم بإضافة حقلين في الجدول الرئيسي وهما

 INCREMENT_FLAG_AFTER     NUMBER(5)
YEAR_ID  NUMBER(5);

وتقوم بعمل بروسيجر يعمل رن أتوماتيكي بحيث يعمل UPDATE كل سنة ويضع لكل موظف
وهكذا عند مناداة الأشخاص كل سنة تقوم بعمل UPDATE لتغيير السنة إلى السنة الحالية

أما الحقل الأول INCREMENT_FLAG_AFTER فعند تحويل السنة تكون القيمة 1
وعند منح الموظفين علاوة تتحول إلى 2

فبهذه الحالة عند مناداة البروسيجر لعمل علاوة تقوم بمناداة السنة  والحالة تكون 1
وعكس ذلك لايقوم بالمناداة 

وإليك البوسيجر الذي يقوم بعمل كل الذي ورد أعلاه


CREATE OR REPLACE PROCEDURE SET_NEW_YEAR
  IS
       CURSOR C1 IS SELECT year_id  FROM HR_PERSONS  ;
 --    REC       C1%ROWTYPE;
         v_year_id   number;
  V_DATE    NUMBER;
  V_DATE_ARABIC       NUMBER;
  BEGIN
   SELECT TO_NUMBER(TO_CHAR(SYSDATE,'YYYY','NLS_CALENDAR=''arabic Hijrah'''))  INTO V_DATE
   FROM DUAL;
      OPEN C1;
    LOOP
    FETCH C1 INTO v_year_id;
       IF v_year_id <>  V_DATE  THEN
          UPDATE HR_PERSONS SET YEAR_ID = V_DATE;

        UPDATE HR_PERSONS SET INCREMENT_FLAG_AFTER = 1;
        END IF;
   EXIT WHEN C1%NOTFOUND;
  END LOOP;
   CLOSE C1;
 COMMIT;
  END;

:)  :blink:

عرض المشاركة



#8 شجووون

شجووون

    مشترك

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

تاريخ المشاركة 16 November 2007 - 11:39 PM

اذا كان التاريخ ميلادي

وماهي افضل طريقه لاضافه علاوه على الراتب
ارجوا المساعده

#9 s_devlop

s_devlop

    عضو نشط

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

تاريخ المشاركة 21 November 2007 - 10:34 AM

الف مليون شكر

لَا تَحْسَبَنَّ الَّذِينَ يَفْرَحُونَ بِمَا أَتَوْا وَيُحِبُّونَ أَنْ يُحْمَدُوا بِمَا لَمْ يَفْعَلُوا فَلَا تَحْسَبَنَّهُمْ بِمَفَازَةٍ مِنَ الْعَذَابِ وَلَهُمْ عَذَابٌ أَلِيمٌ