0

パラメータを1つだけ取り、何らかの仕事をする単純なplsqlプロシージャがあります。プロシージャ自体は、いくつかのデータをログ テーブルに記録し、挿入後にそれをコミットします。つまり、プロシージャの開始、終了などです。

プロシージャ シグネチャは次のとおりです。

pr_procedure_name(batch_size IN NUMBER DEFAULT 1000, poErrorDescription OUT VARCHAR)

そして、これがこの手順を実行するために私が書いたスケジューラ/jb/プログラムです。理想的には、毎日 23 時間に実行したいのですが、テストのために 15 分ごとに実行しています。しかし、うまくいきません。誰かがここで間違っていることを助けることができますか

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_SCHEDULE
    (
      schedule_name    => 'CLEAN_EVERYDAY'
     ,start_date       => trunc(SYSDATE)
     ,repeat_interval  => /*'FREQ=DAILY; BYHOUR=23;'*/ 'freq=MINUTELY;interval=15;'
     ,end_date         => NULL
     ,comments         => 'Description goes here'
    );
END;
/

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_PROGRAM
    (
      program_name         => 'BATCH_CLEANUP'
     ,program_type         => 'PLSQL_BLOCK'
     ,program_action       => 'DECLARE
   nErrorCode   NUMBER;
   sErrorDesc   VARCHAR2 (32767);
BEGIN
    pr_procedure_name( poErrorDescription=>sErrorDesc ) ;

   IF (poErrorDescription IS NOT NULL)
   THEN
      RAISE_APPLICATION_ERROR (-20000, sErrorDesc);
   END IF;
END;'
     ,number_of_arguments  => 0
     ,enabled              => TRUE
     ,comments             => 'More comments'
    );
END;
/

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'CLEAN_JB'
      ,schedule_name   => 'CLEAN_EVERYDAY'
      ,program_name    => 'BATCH_CLEANUP'
      ,comments        => NULL
    );
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'CLEAN_JB'
     ,attribute => 'RESTARTABLE'
     ,value     => TRUE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'CLEAN_JB'
     ,attribute => 'LOGGING_LEVEL'
     ,value     => SYS.DBMS_SCHEDULER.LOGGING_RUNS);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'CLEAN_JB'
     ,attribute => 'MAX_FAILURES');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'CLEAN_JB'
     ,attribute => 'MAX_RUNS');
  BEGIN
    SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
      ( name      => 'CLEAN_JB'
       ,attribute => 'STOP_ON_WINDOW_CLOSE'
       ,value     => FALSE);
  EXCEPTION
    -- could fail if program is of type EXECUTABLE...
    WHEN OTHERS THEN
      NULL;
  END;
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'CLEAN_JB'
     ,attribute => 'JOB_PRIORITY'
     ,value     => 3);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'CLEAN_JB'
     ,attribute => 'SCHEDULE_LIMIT');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'CLEAN_JB'
     ,attribute => 'AUTO_DROP'
     ,value     => FALSE);

  SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'CLEAN_JB');
END;
/
4

0 に答える 0