oracle用户自定义函数问题,望求助!!
各位好,因本人对oracle是初学者在其方面上欠缺还很多,所以望给予指教:
下面是在oracle中增加自定义函数 fn_getdays 但是在if... then ... else if ... ...方面出现了问题,经努力还是没找到原因。
望在行的人帮忙看下,指点一下,感激不尽,下面是我修改过的,但是有问题给予改正。该函数是为求本月的实际天数,p1参数是传入的日期比如:“20040101”
------------------------------
create or replace function fn_getdays(p1 varchar2) return integer
is
v_year varchar(4);
v_month varchar2(2);
v_return int;
--Result integer;
begin
v_year := substring(p1,1,4);
v_month := substring(p1,5,2);
if v_month in ('01','03','05','07','08','10','12') then --如果是31天的月份
v_return := 31
else if v_month in ('04','06','09','11') then --如果是30天的月份
v_return := 30
end if;
else if v_month in ('02') then --如果是2月份
begin
if cast(v_year as int) / 4 = 0 then --如果整除4,则是闰年
v_return := 29
else
v_return := 28
end if;
end if;
end;
end if;
end if;
return(v_return);
end fn_getdays;
------解决方案--------------------这个是IF的语法.
IF condition1 THEN
statement1;
ELSIF condition2 THEN
statement2;
ELSIF condition3 THEN
statement3;
ELSE
statement4;
END IF;
------解决方案--------------------只有两个if,却有5个end if
这么明显的错误,楼主居然都发现不了
SQL code
create or replace function fn_getdays(p1 varchar2) return integer
is
v_year varchar(4);
v_month varchar2(2);
v_return int; --Result integer;
begin
v_year := substring(p1,1,4);
v_month := substring(p1,5,2);
if v_month in ('01','03','05','07','08','10','12') then --如果是31天的月份
v_return := 31
else if v_month in ('04','06','09','11') then --如果是30天的月份
v_return := 30
else if v_month in ('02') then --如果是2月份
begin
if cast(v_year as int) / 4 = 0 then --如果整除4,则是闰年
v_return := 29
else
v_return := 28
end if;
end;
end if;
return(v_return);
end fn_getdays;