【问题标题】:Oracle 12c: Running scheduled job with date intervalOracle 12c:以日期间隔运行计划作业
【发布时间】:2020-03-10 17:21:49
【问题描述】:

我有以下脚本:

SELECT 
USERNAME
ITEM
BUSINESS
ADDED
FROM BUSINESS
WHERE 
BUSINESS IN ('X','Y','Z')
AND ADDED BETWEEN TO_DATE('8/30/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS') AND TO_DATE('9/30/2019 11:59:59', 'MM/DD/YYYY HH24:MI:SS')

日期间隔是正确的,但我希望在每个预定作业之后更改日期。调度作业脚本如下:

SYS.DMBS_SCHEDULER.CREATE_JOB
     (
          job_name => 'test'
         ,start_date => TO_TIMESTAMP_TZ('2019/10/23 09:00:00.000000 US/Eastern', 'yyyy/mm/dd hh24:mi:ss.ff tzr')
         ,repeat_interval => 'FREQ=MONTHLY' INTERVAL=1'
         ,end_date => NULL

等等。等等

我相信我只需要更改脚本中的日期格式,但如何确保脚本日期在每个计划的作业运行后提前 1 个月?提前致谢。

【问题讨论】:

    标签: plsql oracle12c intervals toad dbms-scheduler


    【解决方案1】:

    我并不完全赞同你的标准:

    TO_DATE('8/30/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS') AND TO_DATE('9/30/2019 11:59:59', 'MM/DD/YYYY HH24:MI:SS')
    

    因为这可能是“总是在 30 日”,这意味着 2 月的问题,也可能意味着“上个月的所有时间”。我将假设后者,在这种情况下您不需要硬编码日期,您可以通过操纵 sysdate 来实现这一点,即,

    ADDED >= add_Months(trunc(sysdate,'MM'),-1) AND
    ADDED < trunc(sysdate,'MM')
    

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 2023-03-09
      • 2021-12-05
      • 2019-07-22
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多