为什么只执行一次Oracle DBMS_SCHEDULER作业?

发布于 2025-02-10 07:28:09 字数 991 浏览 0 评论 0 原文

我的oracle作业定义如下:

BEGIN
 DBMS_SCHEDULER.CREATE_JOB(
    JOB_NAME => 'DBMS_JOB_RESYNC_REQUESTS',
    JOB_TYPE => 'PLSQL_BLOCK',
    JOB_ACTION => '
        BEGIN
          -- iterate over implicit cursor 
          FOR K IN (SELECT SCEN_ID
                      from TABLE1
                      WHERE STATUS = 2)
            LOOP           
              -- updating status and date
              UPDATE TABLE1
              SET STATUS = 3, LAST_UPDATED_DATE = SYSDATE
              WHERE SCEN_ID= K.SCEN_ID;
              
            END LOOP;
            COMMIT;
        END;',        
    START_DATE => systimestamp,
    REPEAT_INTERVAL => 'FREQ=MINUTELY;INTERVAL=1;BYSECOND=0;',
    END_DATE => NULL,
    ENABLED => TRUE,
    COMMENTS => 'TESTING JOB'); 
END;

我有一个表由外部应用程序不断更新的表 status 列从1到2值,我想创建一个更改的作业,以更改状态从2到3,还添加了进行更改的日期。

我不知道为什么我的工作只运行一次,因为我已经指定每分钟运行它。

我做错了吗?

I have an Oracle job defined as follows:

BEGIN
 DBMS_SCHEDULER.CREATE_JOB(
    JOB_NAME => 'DBMS_JOB_RESYNC_REQUESTS',
    JOB_TYPE => 'PLSQL_BLOCK',
    JOB_ACTION => '
        BEGIN
          -- iterate over implicit cursor 
          FOR K IN (SELECT SCEN_ID
                      from TABLE1
                      WHERE STATUS = 2)
            LOOP           
              -- updating status and date
              UPDATE TABLE1
              SET STATUS = 3, LAST_UPDATED_DATE = SYSDATE
              WHERE SCEN_ID= K.SCEN_ID;
              
            END LOOP;
            COMMIT;
        END;',        
    START_DATE => systimestamp,
    REPEAT_INTERVAL => 'FREQ=MINUTELY;INTERVAL=1;BYSECOND=0;',
    END_DATE => NULL,
    ENABLED => TRUE,
    COMMENTS => 'TESTING JOB'); 
END;

I have a table that is constantly being updating by an external application the STATUS column from 1 to 2 value, and I would like to create a job that change STATUS from 2 to 3 and also add the date when changes were made.

I don't know why my job runs only once since I have specified to run it every minute.

Am I doing something wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

热鲨 2025-02-17 07:28:09

您的代码中有一个无限的循环。您是否曾经测试过代码?

尝试一下

BEGIN 
   
     UPDATE TABLE1
     SET STATUS = 3, 
     LAST_UPDATED_DATE = SYSDATE
     WHERE STATUS = 2;
          
     COMMIT;
END;

You have an infinite loop in your code. Did you ever test the code?

Try this

BEGIN 
   
     UPDATE TABLE1
     SET STATUS = 3, 
     LAST_UPDATED_DATE = SYSDATE
     WHERE STATUS = 2;
          
     COMMIT;
END;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文