Oracle N提取之前的工作日数

Oracle N提取之前的工作日数,oracle,plsql,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个工作日,然后给出输出 例如,如果

我需要得到上一个营业日期的第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;
但不起作用


请帮助

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

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

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

希望这有帮助。

假日日历表的内容是什么:是否有业务日期列表或其他内容?如果您发布表格的详细信息,这会有所帮助。示例数据和预期结果假日表将输入参数作为日期,并输出是假日还是备注示例用户将输入当前业务day和一个参数表示2,则我的输出应减少2个工作日,例如,如果用户输入从dual中选择holiday_func(sysdate,2),则当sysdate='2015年11月27日'时,holiday_func应输出为2015年11月24日。此处2015年11月26日为假期。在另一个示例中,当sysdate='08-sep-2015'时,函数应返回'03-sep-2015'。这里是2015年9月7日的假期谢谢大家的帮助。我确实使用Pl/sql表的exists子句解决了这个问题。通过这种方式,我确实避免了“找不到数据”错误,并且能够将索引从1到n分配给第二个表