首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle用户自定义函数有关问题,望!

2012-02-25 
oracle用户自定义函数问题,望求助!!各位好,因本人对oracle是初学者在其方面上欠缺还很多,所以望给予指教:

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; 

热点排行