提前N个工作日提取

时间:2015-11-13 03:46:38

标签: oracle plsql

我需要获得第n个上一个营业日期

BEGIN
    SELECT holiday_ind
      INTO v_holiday_ind
      FROM holiday_calendar 
       AND bus_date = L_bus_dt;
EXCEPTION
    WHEN OTHERS THEN
          V_holiday_ind=’N’
END;

现在用户将输入一个日期和一个整数说n

我必须从输入日期减去n个工作日并提供输出

例如,如果用户输入2015年5月26日和2,则输出应为2015年5月20日,因为2015年5月25日是阵亡将士纪念日,2015年5月23日可能会在2015年5月24日太阳

我试过了

FOR i IN 1..n
LOOP
BEGIN
   SELECT holiday_ind
     INTO v_holiday_ind
     FROM holiday_calendar 
      AND bus_date = L_bus_dt;
    EXCEPTION
        WHEN OTHERS THEN
          V_holiday_ind=’N’
    END;
    L_bus_date := L_bus_date - n;
END LOOP;

但没有工作

请帮忙

1 个答案:

答案 0 :(得分:0)

您的代码段中存在语法错误,我认为使用FOR LOOP可能不合适。

这里我假设holiday_calendar也包含周末信息。 代码将是这样的

begin
    while n > 0
    loop
        if l_bus_dt is holiday / weekend then
            l_bus_dt = l_bus_dt - 1
        otherwise
            l_bus_dt = l_bus_dt - 1
            n = n - 1
        end if
    end loop
end

希望这会有所帮助。