بتاريخ: 4 مايو 200818 سنة comment_128004 السلام عليكمأرجو المساعدة فى إيجاد إجراء يتم من خلاله طرح تاريخين وإ عطاء النتيجة فى شكل سنه شهر يوم ORACLE9iمثال: تاريخ التعيين 11-يناير -1950 تاريخ التقاعد 12-مارس-2008النتيجة: مدة الخدمة سنة شهر يوم 52 10 28 تقديم بلاغ
بتاريخ: 4 مايو 200818 سنة comment_128049 على قدر فهمى لسؤالك هذا الكود يحل المشكله و انا جربته مع تقرير خاص بالمعاشات declare sys_day NUMBER; sys_month NUMBER; sys_year NUMBER; st_day NUMBER; st_month NUMBER; st_year NUMBER;begin SYS_DAY := TO_CHAR(sysdate, 'DD'); SYS_MONTH := TO_CHAR(:sysdate, 'MM'); SYS_YEAR := TO_CHAR(:Syadate, 'YYYY'); ST_DAY := TO_CHAR(:HIREDATE, 'DD'); ST_MONTH := TO_CHAR(:HIREDATE, 'MM'); ST_YEAR := TO_CHAR(:HIREDATE, 'YYYY'); IF TO_NUMBER(SYS_DAY) < TO_NUMBER(ST_DAY) THEN SYS_DAY := TO_NUMBER(SYS_DAY) + 30; SYS_MONTH := TO_NUMBER(SYS_MONTH) - 1; END IF; IF TO_NUMBER(SYS_MONTH) < TO_NUMBER(ST_MONTH) THEN SYS_MONTH := TO_NUMBER(SYS_MONTH) + 12; SYS_YEAR := TO_NUMBER(SYS_YEAR)- 1; END IF; :SERV_PER_DAY := TO_NUMBER(SYS_DAY) - TO_NUMBER(ST_DAY); :SERV_PER_MONTH := TO_NUMBER(SYS_MONTH) - TO_NUMBER(ST_MONTH); :SERV_PER_YAER := TO_NUMBER(SYS_YEAR) - TO_NUMBER(ST_YEAR);EXCEPTION WHEN NO_DATA_FOUND THEN NULL; end; بالتوفيق و الله المستعان،، تقديم بلاغ
بتاريخ: 5 مايو 200818 سنة كاتب الموضوع comment_128058 جزاك الله عنا الف خير يا مهندس سامحهذا هو بالضبط ما أريده تقديم بلاغ
بتاريخ: 5 مايو 200818 سنة comment_128060 جزاك الله خير يا اخ سامحلكن المشكلة في الشفرة التالية : IF TO_NUMBER(SYS_DAY) < TO_NUMBER(ST_DAY) THEN SYS_DAY := TO_NUMBER(SYS_DAY) + 30; SYS_MONTH := TO_NUMBER(SYS_MONTH) - 1; END IF; انت افترضت ان الشهر الذي بدا الموظف العمل فيه 30 يوما ولكن قد تكون عدد ايام الشهر اقل او اكثر تقديم بلاغ
بتاريخ: 5 مايو 200818 سنة comment_128080 افرض ان تواريخك هي xd و ydوتريد ان تضع الفرق في ddيكون على النحو التاليd:=:yd-xd; تقديم بلاغ
بتاريخ: 5 مايو 200818 سنة comment_128094 الأخ سالم الفروي اذا كان لديك حل فتفضل به و يبقى جزاك الله خير .. انا عن نفسى لم اواجه هذه المشكله على الأطلاق مع اى عميل .... بالتوفيق للجميع تقديم بلاغ
بتاريخ: 5 مايو 200818 سنة comment_128109 السلام عليكم ورحمة الله وبركاتههذه اول مشاركة لى فى هذا المنتدى حيث اننى مشترك حديثاواتمنى ان استمر فيه حيث اننى بالفعل استفيد منه واتمنى ان استمر معكمواقدم شكر خاص للباشمهندس سامح على مواضيعه المتميزة ومشاركاتة واعتقد بالنسبة لهذه المشاركة ان هذه الداله قد تفيد وهى last_day(),وهى تاخد متغير من نوع تاريخ dateوتعود باخر يوم فى هذا الشهر الموجود بالتاريخفكما فى مثال الباشمهندس سامح يمكن ان نقوم بوضع هذه الدالة بدلا من رقم 30 فقط IF TO_NUMBER(SYS_DAY) < TO_NUMBER(ST_DAY) THEN SYS_DAY := TO_NUMBER(SYS_DAY) + to_number(to_char(last_day(:HIREDATE) ,'dd') ) ; SYS_MONTH := TO_NUMBER(SYS_MONTH) - 1; END IF; تقديم بلاغ
بتاريخ: 6 مايو 200818 سنة كاتب الموضوع comment_128169 الأخ سامح :عند تنفيذ ال DECLARE يتم عرض رساله Bind variable "SERV_PER_MONTH" not declared.التكرم بمعرفة سبب ال ERORR لانى إجتهدت كثيرا ولم أعرف السبب تقديم بلاغ
بتاريخ: 6 مايو 200818 سنة comment_128175 السلام عليكم ورحمة الله وبركاته جرب التالي والنتيجة أدناه select trunc((to_date('12/03/2008','dd/mm/yyyy')-to_date('11/01/1950','dd/mm/yyyy'))/365) years, trunc(mod(to_date('12/03/2008','dd/mm/yyyy')-to_date('11/01/1950','dd/mm/yyyy'),365)/30) months trunc(mod(mod(to_date('12/03/2008','dd/mm/yyyy')-to_date('11/01/1950','dd/mm/yyyy'),365),30)) days from dual / 85 سنة وشهرين و15 يوم YEARS MONTHS DAYS ------ ---------- ---------- 58 2 15 تم تعديل 6 مايو 200818 سنة بواسطة Amgad تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.