【问题标题】:N number of prior business days to extract要提取的前 N ​​个工作日
【发布时间】:2015-11-13 03:46:37
【问题描述】:

我需要获取前第 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 个工作日并给出输出

例如,如果用户输入 May 26 2015 和 2 ,则输出应为 May 20 2015,因为 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;

但不工作

请帮忙

【问题讨论】:

  • holiday_calendar表的内容是什么:有没有营业日期列表之类的?
  • 如果您发布 table.sample 数据和预期结果的详细信息会有所帮助
  • 假期表以输入参数为日期,输出是否为假期
  • 示例用户将输入当前工作日和一个参数说 2 那么我的输出应该少 2 个工作日例如如果用户输入 select holiday_func(sysdate,2) from dual the holiday_func 应该输出当 sysdate='27-nov-2015' 时,如 2015 年 11 月 24 日。这里 2015 年 11 月 26 日是假期。在另一个示例中,当 sysdate='08-sep-2015' 时,该函数应返回 '03-sep-2015'。这里 07-sep-2015' 是假期

标签: oracle plsql


【解决方案1】:

您的代码 sn-p 存在语法错误,我认为 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

希望这会有所帮助。

【讨论】:

  • 感谢大家的帮助。我确实通过使用 Of Pl/sql 表的存在子句来解决它。通过这种方式,我确实逃脱了没有找到数据的错误,并且能够分配给第二个表,索引从 1 到 n
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多