الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

بستخدام function

مغلق
بدأه سلطان جافا في 23 نوفمبر 2006 · 2 رد · 2,074 مشاهدة · في قسم لغةالاجرائات Pl/sql
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني انا عندي هذي الكود الذي يقوم بتحويل التاريخ الميلادي الي الهجري

قم بتنفيذ هذا ال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

#2
declare 
   hd date; 
begin 
   hd :=hd_fun('التاريخ الذي تريده ');
end;
#3

declare

in_greg_date date;

out_hijra_date varchar2(10);

APPL date:=to_char(sysdate,'DD-MON-YY');

APL_HIGRA varchar2(20);

begin

in_greg_date :=APPL;

gtoh(in_greg_date,out_hijra_date);

IF SUBSTR(out_hijra_date,5,1)='-' then

APL_HIGRA:=SUBSTR(out_hijra_date,1,3)||'0'||SUBSTR(out_hijra_date,4,9);

else

APL_HIGRA := out_hijra_date;

هذا الموضوع مغلق.

مواضيع مشابهة