当前位置: 代码迷 >> Oracle开发 >> Warning:Function created with compilation errors,该怎么解决
  详细解决方案

Warning:Function created with compilation errors,该怎么解决

热度:252   发布时间:2016-04-24 06:45:50.0
Warning:Function created with compilation errors
 create or replace function Count_Workday(Start_Time date, Finish_Time date)
  return varchar2 as

  s_Time date; --开始时间
  f_Time date; --结束时间

  w_Day_0   int; --求开始时间和结束时间的工作日(未计算节日)
  w_Day_1   int; --阳历节日
  w_Day_2   int; --农历节日
  w_Day_All int; --开始时间和结束时间的节日数

  o_OutPut VARCHAR2(125); --返回值

  e_ErrMsg VARCHAR2(200); --异常
  e_Error1 EXCEPTION;
  e_Error2 EXCEPTION;

begin

  s_Time := Start_Time; --赋值
  f_Time := Finish_Time;

  --异常判断
  if s_Time < TO_DATE('1900-01-31', 'YYYY-MM-DD') or
     f_Time > to_date('2050-01-23', 'YYYY-MM-DD') then
    raise error1;
  end if;

  if f_time - s_time < 0 then
    raise error2;
  end if;

  --先统计除开节日以外的所以假日,也就是星期六和星期天
  w_Day_0 := trunc((f_Time - s_Time + 1) / 7) * 5 + nvl(length(replace(substr('01111100111110', to_char(s_Time,'d'), mod(f_Time - s_Time + 1, 7)),'0',''));

  --统计开始时间和结束时间之间的节日数
  select count(*)
    into w_Day_1
    from (select to_char(s_Time + rownum - 1, 'MM-DD') as a
            from dual
          connect by rownum <= f_Time - s_Time) t
   where t.a in ('05-01', '01-01' , '10-01', '10-02', '10-03'); --计算农历青年节或者元旦的节日数以及国庆

  w_Day_All := w_Day_1; --累加

  select count(*)
    into w_Day_2
    from (select f_getlunar(s_Time + rownum - 1) as a--f_getlunar是一个阳历转农历的自定义函数,这里无错
            from dual
          connect by rownum <= f_Time - s_Time) t
   where t.a like '04月 05日'
      or t.a like '05月 05日'
      or t.a like '08月 15日'
      or t.a like '01月 01日'
      or t.a like '01月 02日'
      or t.a like '01月 03日'; --润月的节日不放假,格式

  w_Day_All := w_Day_All + w_Day_2; --累加  

  -- 格式化返回值
  o_OutPut := to_char(w_Day_0 - w_Day_All) || '天';

  RETURN o_OutPut;

EXCEPTION
  WHEN e_Error1 THEN
    RETURN '日期错误! 有效范围(阳历): 1900/01/31 - 2050/01/22';
  when e_Error2 then
    return '开始时间大于结束时间';
  WHEN OTHERS THEN
    e_ErrMsg := SUBSTR(SQLERRM, 1, 200);
    RETURN e_ErrMsg;
end;
 

注:在command sql中执行代码,报错。
Warning: Function created with compilation errors

使用show error命令时,却告诉提示我,No errors for FUNCTION SCOTT.COUNT_WORKDAY(START_TIME
------解决方案--------------------
 create or replace function Count_Workday(Start_Time date, Finish_Time date)  左右括号是中文字符吧,
应该是: create or replace function Count_Workday (Start_Time date, Finish_Time date)
  相关解决方案