Вопрос:

Выполнение программы расписаний Oracle с помощью задания расписаний Oracle

sql database oracle plsql

191 просмотра

1 ответ

107 Репутация автора

Я знаю, что для планирования любого действия в таблице базы данных я должен сформировать цепочку расписаний, то есть задание (DBMS_SCHEDULER.CREATE_JOB), которое связывает расписание (DBMS_SCHEDULER.CREATE_SCHEDULE) и программу (DBMS_SCHEDULER.CREATE_PROGRAM). Но что, если я хочу выполнить ту же задачу только через ПРОГРАММУ и связанную работу? Является ли это возможным ? Я пытался, и когда я проверяю журнал программы, он показывает мне:

   RUNS      FAILS
======================
    10        10

Это означает, что задание было выполнено 10 раз (выполняется с интервалом в 5 секунд), и оно не выполнялось столько же раз.

Ниже приведены коды для соответствующей работы и программы:

PROGRAM-CODE :
=================

BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
  program_name         => 'HR.INSERT_PROG'
 ,program_type         => 'PLSQL_BLOCK'
 ,program_action       => 'insert into sch_test values (s1.nextval,s2.nextval)'
 ,number_of_arguments  => 0
 ,enabled              => TRUE
 ,comments             => NULL
);
END;


JOB-CODE :
==========

BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB
(
   job_name        => 'HR.JOB1'
  ,schedule_name   => 'HR.INSERT_SCH'
  ,program_name    => 'HR.INSERT_PROG'
  ,comments        => NULL
);
END;

Заинтересованная таблица никогда не заполняется. Если кто-нибудь может сказать мне, что я делаю здесь неправильно? Разве это не может быть достигнуто без расписания?

Автор: hashir Источник Размещён: 24.03.2017 07:10

Ответы (1)


2 плюса

26900 Репутация автора

Решение

Вам не нужно создавать отдельные PROGRAM и SCHEDULE, вы можете поместить все в одну работу следующим образом:

DBMS_SCHEDULER.CREATE_JOB
(
   job_name        => 'HR.JOB1'
  ,start_date      => LOCALTIMETAMP
  ,repeat_interval => 'FREQ=SECONDLY;INTERVAL=5'
  ,end_date        => NULL
  ,job_class       => 'DEFAULT_JOB_CLASS'
  ,job_type        => 'PLSQL_BLOCK'
  ,job_action      => 'insert into sch_test values (s1.nextval,s2.nextval);'
  ,enabled         => TRUE
);

Именованные объекты расписания и именованные объекты программы полезны, только если у вас есть несколько из них, работающих в сложных комбинациях и зависимостях.

Автор: Wernfried Domscheit Размещён: 24.03.2017 07:30
Вопросы из категории :
32x32