有一张节假日的配置表,里面是全年的节假日,包括周六,周日,五一,十一,元旦,春节等等,存的类型是VARCHAR2,例如:"2006-05-01";现在要写这样一个函数,实现的功能是:传入一个varchar2类型的时间跟表里的节假日进行比对,传入后把该时间加上1天(加上1天的功能好像ORACLE里面没有现成的函数)跟表里的记录比对,如果没有存在就把加上一天后的时间给返回出来,如果加上1天后在表里还存在就再加1天,然后进行比对,直到该时间不在表里,然后把该时间返回出来。
如:传入"2006-04-30" 返回 "2006-05-08" ; 传入 "2006-05-12"(周五) 返回 "2006-05-15"(周一)谢谢指教~~~

解决方案 »

  1.   

    TO_DATE('2006-04-30','YYYY-MM-DD')+1 得到日期加1,再把表里的时间转换为时间,比较
      

  2.   

    CREATE OR REPLACE function re_day(v_day varchar)
    return varchar
    is
    v_date date;
    v_num varchar(10);
    char_date varchar(10);
    begin
    select to_date(v_day,'yyyymmdd')+1 into v_date from dual;
    loop
    begin
    select inday into v_num from h_date where to_date(inday,'yyyy-mm-dd')=v_date;
    EXCEPTION
    WHEN no_data_found THEN
    select to_char(v_date,'yyyy-mm-dd') into char_date from dual;
    return char_date;
    when others then
    return SUBSTR(SQLERRM,1,200);
    end;
    v_date:=v_date+1;
    end loop;
    end;
    /自已优化一下
      

  3.   

    select re_day('20060430') from dual;
      

  4.   

    OK,谢谢,还有一个问题请教一下,为什么都喜欢在参数前面加上v_
      

  5.   

    函数里面定义的变量一定要规定大小吗?可不可以直接声明VARCHAR2,而不要VARCHAR2(10)?