السلام عليكم
اخواني انا عندي هذي الكود الذي يقوم بتحويل التاريخ الميلادي الي الهجري
قم بتنفيذ هذا الfunction اولاً ثم CREATE OR REPLACE function intPart(floatNum in number) return number is floatNum1 number:=floatNum; begin if (floatNum1< -0.0000001) then return ceil(floatNum1-0.0000001); end if; return floor(floatNum1+0.0000001); end; / قم بتنفيذ الfuntionهذا ثانياً CREATE OR REPLACE function hd_fun(dateh date) return date is datea date; d number(2):=to_char(dateh,'dd'); m number(2) :=to_char(dateh,'mm'); y number(4) :=to_char(dateh,'yyyy'); jd number; l number; j number; n number; begin /*if ((y>1582) or ((y=1582)and(m>10))or((y=1582)and(m=10)and(d>14))) then jd:=intPart((1461*(y+4800+intPart((m-14)/12)))/4)+intPart((367*(m-2-12*(intPart((m-14)/12))))/12)- intPart( (3* (intPart( (y+4900+ intPart( (m-14)/12) )/100) ) ) /4)+d-32075; else*/ jd := 367*y-intPart((7*(y+5001+intPart((m-9)/7)))/4)+intPart((275*m)/9)+d+1729765; l:=jd-1948440+10632; n:=intPart((l-1)/10631); l:=l-10631*n+354; j:=(intPart((10985-l)/5316))*(intPart((50*l)/17719))+(intPart(l/5670))*(intPart((43*l)/15238)); l:=l-(intPart((30-j)/15))*(intPart((17719*j)/50))-(intPart(j/16))*(intPart((15238*j)/43))+29; m:=intPart((24*l)/709); d:=l-intPart((709*m)/24); y:=30*n+j-30; if length(d) <2 AND length(M) <2 THEN datea:=to_date(0||d||0||m||y,'ddmmyyyy'); elsif length(d) <2 then datea:=to_date(0||d||m||y,'ddmmyyyy'); elsif length(M) <2 THEN datea:=to_date(d||0||m||y,'ddmmyyyy'); else datea:=to_date(d||m||y,'ddmmyyyy'); end if; --end if; return datea; end; / الان يمكن استخدامه مع اي جملة select مثال select hd_fun(sysdate) from dual; مثال اخرى select hiredate,hd_fun(hiredate) from emp;
الي اريد اعمله الحين هو اني اقوم انا بأدخال التاريخ ميلادي وهو يحوله الي هجري
ولكم مني جزيل الشكر
اعتقد هي اني استدعيها في برنامج ناثي
بس ما اعرف الطريقة بصراحة لاني مبتدأ في pl/sql