为什么我的DBMS Scheduler Job无法执行?

时间:2019-05-29 10:09:40

标签: sql oracle plsql scheduler jobs

我正在创建一个客房整理作业,该作业将删除早于一周的数据,因为我已编写了一个定期运行的作业。 在sql developer中,当我看到作业状态时,每次都会显示成功,但实际上,该作业仅在第一次执行或在其中执行任何编辑时才执行指定的工作。能帮我找出问题所在吗?

我的表的字段更新日期为'2018-05-06'格式,因此我正在使用它来识别哪些记录更旧

BEGIN
    SYS.DBMS_SCHEDULER.CREATE_JOB (
            job_name => '"OWNER"."test"',
            job_type => 'PLSQL_BLOCK',
            job_action => 'DECLARE
   CURSOR c1 is
      SELECT updateddate, IDENTIFIER FROM LIMITS;

   my_updateddate VARCHAR2(255 CHAR);
   my_identifier VARCHAR2(255 CHAR);
   templateMessage3 VARCHAR2(255 CHAR);
   templateMessage4 VARCHAR2(255 CHAR);

BEGIN
   FOR i IN c1 LOOP
      my_updateddate:=i.updateddate;
      my_identifier:=i.identifier;
      templateMessage3 := replace(my_updateddate, ''-'', '''');
      templateMessage4 := TO_DATE(templateMessage3, ''yyyymmdd'');
      IF templateMessage4 < sysdate-7 THEN
      Delete from LIMITS where identifier=my_identifier AND updateddate=my_updateddate;
      END IF;
      COMMIT;
   END LOOP;
END;
',
            number_of_arguments => 0,
            start_date => TO_TIMESTAMP_TZ('2019-05-29 15:11:19 Asia/Calcutta','YYYY-MM-DD HH24.MI.SS TZR'),
            repeat_interval => 'FREQ=MINUTELY;INTERVAL=3',
            end_date => NULL,
            job_class => '"SYS"."DEFAULT_JOB_CLASS"',
            enabled => True,
            auto_drop => FALSE,
            comments => 'housekeeping',
            credential_name => NULL,
            destination_name => NULL);

    SYS.DBMS_SCHEDULER.SET_ATTRIBUTE( 
             name => '"OWNER".""', 
             attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);

    SYS.DBMS_SCHEDULER.enable(
             name => '"OWNER"."test"');
END; 
/

我的工作每次都显示状态成功,但是仅是第一次删除行。 我希望它每次运行时都会删除较旧的数据

0 个答案:

没有答案