oracle定义sql函数

求助oracle定义sql函数create or replace function getTerm(username_new varchar2(32))return varchar2(1

求助oracle定义sql函数
create or replace function getTerm(username_new varchar2(32))
return varchar2(10)
as
begin
     result varchar2(10);
     term number:=1;
 yearCode varchar2(10):=substr(username_new,4,2);
 semesterCode varchar2(10):=substr(username_new,6,1);
 year number:=convert(number,yearCode);
 currentdate date(7):=TO_DATE(to_char(getdate(),'YYYY-MM-DD'),'YYYY-MM-DD');
 currentyear number:=convert(number,to_char(currentdate,'yyyy'));
 lastyear number:=0;
 d date(7):=TO_DATE(to_char(currentdate,'YYYY')+'-'+'03-16','YYYY-MM-DD');
 newTermStartDate date(7);
 lastTermEndDate date(7);
 if currentdate<d then
     lastyear:=1;
     end if;
 if lastyear=1 then
 currentyear:=currentyear-1;
     end if;
     term:=(currentyear-year)*2;
     newTermStartDate:=TO_DATE(to_char(currentdate,'YYYY')+'-09-16','YYYY-MM-DD');
     lastTermEndDate:=TO_DATE(to_char(currentdate,'YYYY')+'-03-16','YYYY-MM-DD');
 if currentdate<newTermStartDate then
    if currentdate>lastTermEndDate then
   term:=term+1;
end if;
 else
term:=term+2;
 end if;
 if semesterCode=2 then
term:=term-1;
 end if;
 result:=convert(varchar2(10),term);
 return result;
end getTerm;
这是我写的sql函数
下面是错误报告:
[Err] ORA-24344: success with compilation error

[Err] create or replace function getTerm(username_new varchar2(32))
return varchar2(10)
as
begin
     result varchar2(10);
     term number:=1;
 yearCode varchar2(10):=substr(username_new,4,2);
 semesterCode varchar2(10):=substr(username_new,6,1);
 year number:=convert(number,yearCode);
 currentdate date(7):=TO_DATE(to_char(getdate(),'YYYY-MM-DD'),'YYYY-MM-DD');
 currentyear number:=convert(number,to_char(currentdate,'yyyy'));
 lastyear number:=0;
 d date(7):=TO_DATE(to_char(currentdate,'YYYY')+'-'+'03-16','YYYY-MM-DD');
 newTermStartDate date(7);
 lastTermEndDate date(7);
 if currentdate<d then
     lastyear:=1;
     end if;
[Err] ORA-00900: invalid SQL statement

[Err] if lastyear=1 then
 currentyear:=currentyear-1
[Err] ORA-00900: invalid SQL statement

[Err] end if
[Err] ORA-00900: invalid SQL statement

[Err] term:=(currentyear-year)*2
[Err] ORA-00900: invalid SQL statement

[Err] newTermStartDate:=TO_DATE(to_char(currentdate,'YYYY')+'-09-16','YYYY-MM-DD')
[Err] ORA-00900: invalid SQL statement

[Err] lastTermEndDate:=TO_DATE(to_char(currentdate,'YYYY')+'-03-16','YYYY-MM-DD')
[Err] ORA-00900: invalid SQL statement

[Err] if currentdate<newTermStartDate then
    if currentdate>lastTermEndDate then
   term:=term+1
[Err] ORA-00900: invalid SQL statement

[Err] end if
[Err] ORA-00900: invalid SQL statement



[Err] else
term:=term+2
[Err] ORA-00900: invalid SQL statement

[Err] end if
[Err] ORA-00900: invalid SQL statement

[Err] if semesterCode=2 then
term:=term-1
[Err] ORA-00900: invalid SQL statement

[Err] end if
[Err] ORA-00900: invalid SQL statement

[Err] result:=convert(varchar2(10),term)
[Err] ORA-00900: invalid SQL statement

[Err] return result
[Err] ORA-00900: invalid SQL statement

[Err] end getTerm
[Msg] Finished - Unsuccessfully
[解决办法]


CREATE OR REPLACE FUNCTION GETTERM(USERNAME_NEW VARCHAR2) RETURN VARCHAR2 AS
  RESULT           VARCHAR2(100); --这里需要长度弟弟,我说的是return 后面的不需要长度
  TERM             NUMBER := 1;
  YEARCODE         VARCHAR2(100) := SUBSTR(USERNAME_NEW, 4, 2); --这里需要长度弟弟,我说的是return 后面的不需要长度
  SEMESTERCODE     VARCHAR2(100) := SUBSTR(USERNAME_NEW, 6, 1); --这里需要长度弟弟,我说的是return 后面的不需要长度
  YEAR             NUMBER := TO_NUMBER(YEARCODE); 
  CURRENTDATE      DATE := TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD'),
                                   'YYYY-MM-DD');
  CURRENTYEAR      NUMBER := TO_NUMBER(TO_CHAR(CURRENTDATE, 'yyyy'));
  LASTYEAR         NUMBER := 0;
  D                DATE := TO_DATE(TO_CHAR(CURRENTDATE, 'YYYY') + '-' +
                                   '03-16',
                                   'YYYY-MM-DD');
  NEWTERMSTARTDATE DATE;
  LASTTERMENDDATE  DATE;
BEGIN
  IF CURRENTDATE < D THEN
    LASTYEAR := 1;
  END IF;
  IF LASTYEAR = 1 THEN
    CURRENTYEAR := CURRENTYEAR - 1;
  END IF;
  TERM             := (CURRENTYEAR - YEAR) * 2;
  NEWTERMSTARTDATE := TO_DATE(TO_CHAR(CURRENTDATE, 'YYYY') + '-09-16',
                              'YYYY-MM-DD');
  LASTTERMENDDATE  := TO_DATE(TO_CHAR(CURRENTDATE, 'YYYY') + '-03-16',
                              'YYYY-MM-DD');


  IF CURRENTDATE < NEWTERMSTARTDATE THEN
    IF CURRENTDATE > LASTTERMENDDATE THEN
      TERM := TERM + 1;
    END IF;
  ELSE
    TERM := TERM + 2;
  END IF;
  IF SEMESTERCODE = 2 THEN
    TERM := TERM - 1;
  END IF;
  RESULT := TO_CHAR(TERM);
  RETURN RESULT;
END GETTERM;