0

我有一个程序,我需要从生产部署之日起每周执行一次。它应该在部署当天运行,然后在接下来的几周内运行,直到存储在变量中的结束日期。

我需要在过程级别合并它,而不是创建单独的调度程序或 dbms_job

假设开始日期是 2013 年 11 月 1 日(部署日),结束日期是 2014 年 4 月 30 日,我需要在此期间每周运行一次程序,包括开始日期。

假设 proc 在 2014 年 4 月 28 日运行,下周在 5 月,那么到 2014 年 4 月 30 日它应该每天运行。

帮助将不胜感激。

    BEGIN

        FOR I IN (SELECT typename ....)-- will give 3 output
        LOOP
        IF typename = 'ABC' THEN
       -- run THE UPDATE every week FROM start date TO END

            UPDATE  TEST
                    SET TEST.A = ....,
                        TEST.b = ....
                    WHERE TEST.c IN (....)

        ELSIF typename = 'PQR'THEN 
             UPDATE  TEST1
                    SET TEST.A1 = ...,
                        TEST.b1 = ...,
                    WHERE test1.c IN (....)  
         END LOOP;
         END;                 
     -- run THE UPDATE every week FROM start date TO END 

     --Note start date and end date is different for different types.

     --***If the week it ran is less than end date then schedule the update every day from --that week
     --eg the last day ends at 04/30/2014, , 
--the last run happened on 04/28/2014 then update should run on 4/29,4/30 also
4

1 回答 1

0

考虑一下 Bob Jarvis 的评论,但如果您仍然需要解决问题,一种可能的解决方案是使用 dbms_lock.sleep(Number_of_seconds); ,所以一个基本的伪代码是:

  • 运行您的 DML 语句
  • 计算一周内的秒数
  • 使用 dbms_lock.sleep( Number_of_seconds ); 暂停程序
  • 重复直到结束日期等于或小于 SYSDATE。

在此处查看有关该程序的更多信息

于 2013-08-09T20:03:47.280 回答