You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于日期范围及调度类型向Oracle表插入对应调度记录

Oracle 调度记录插入实现方案

前置说明

  • 传入的起始日期、结束日期默认格式为DD/MM/YYYY,可根据实际业务调整格式掩码
  • 假设存储调度记录的表为scheduler_table,存储调度日期的字段为scheduled_date
  • 调度类型参数支持不区分大小写传入

实现规则

根据调度类型的不同,日期生成步进规则如下:

  • Daily(每日):从上一个生成日期往后加1天
  • Weekly(每周):从上一个生成日期往后加7天
  • Monthly(每月):从上一个生成日期往后加1个月
  • Annually(每年):从上一个生成日期往后加1年

完整实现代码

直接用Oracle递归查询生成符合要求的日期序列,可一次性完成插入,性能优于循环遍历写法:

INSERT INTO scheduler_table (scheduled_date)
WITH input_param AS (
  -- 三个:p开头的变量为入参占位符,实际调用时替换为传入值即可
  SELECT 
    TO_DATE(:p_from_date, 'DD/MM/YYYY') AS from_date,
    TO_DATE(:p_to_date, 'DD/MM/YYYY') AS to_date,
    UPPER(:p_schedule_type) AS schedule_type
  FROM DUAL
)
SELECT 
  CASE ip.schedule_type
    WHEN 'DAILY' THEN ip.from_date + (LEVEL - 1)
    WHEN 'WEEKLY' THEN ip.from_date + (LEVEL - 1)*7
    WHEN 'MONTHLY' THEN ADD_MONTHS(ip.from_date, LEVEL - 1)
    WHEN 'ANNUALLY' THEN ADD_MONTHS(ip.from_date, (LEVEL - 1)*12)
  END AS scheduled_date
FROM input_param ip
CONNECT BY 
  CASE ip.schedule_type
    WHEN 'DAILY' THEN ip.from_date + (LEVEL - 1)
    WHEN 'WEEKLY' THEN ip.from_date + (LEVEL - 1)*7
    WHEN 'MONTHLY' THEN ADD_MONTHS(ip.from_date, LEVEL - 1)
    WHEN 'ANNUALLY' THEN ADD_MONTHS(ip.from_date, (LEVEL - 1)*12)
  END <= ip.to_date;
COMMIT;

效果验证

日调度场景验证

传入参数:起始日期01/01/2021,结束日期25/01/2021,调度类型Daily
会生成2021年1月1日到2021年1月25日之间所有自然日的记录,和示例要求一致。

周调度场景验证

传入参数:起始日期01/01/2021,结束日期25/01/2021,调度类型Weekly
会生成01/01/2021、08/01/2021、15/01/2021、22/01/2021四条记录,和示例要求一致。

内容的提问来源于stack exchange,提问作者TDApower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:27:07