Oracle: как запустить хранимую процедуру «позже» - PullRequest
1 голос
/ 13 марта 2009

У нас есть система, которая позволяет пользователям, взаимодействующим с данными в базе данных, устанавливать различные правила, которые используются для изменения данных до их объединения в основную таблицу. Например, в заказе может быть правило, определяющее, какую компанию доставки использовать на основе адреса клиента.

Изначально он предназначен для работы только с загружаемыми данными, поэтому он ограничен функциями, которые вы можете вызывать из оператора выбора. Важно отметить, что данные еще не находятся в таблице назначения.

Теперь у меня есть проект, который требует обновления другой таблицы (отлично - я могу использовать для этого прагму aut auton_transaction). Однако есть некоторые функции, которые мне нужно запустить, которые требуют вставки данных перед их запуском (то есть они агрегируют данные).

Итак, я действительно хочу просто поставить в очередь выполнение моей процедуры до некоторого времени спустя (это не зависит от времени).

Как мне это сделать в Oracle? Обилие документации довольно ошеломляет, когда я просто хочу сделать что-то простое.

Ответы [ 2 ]

5 голосов
/ 13 марта 2009
BEGIN
  DBMS_SCHEDULER.create_job (
    job_name => 'daily_tasks_job',
    job_type              => 'STORED_PROCEDURE',
    job_action            => 'prc_daily_tasks',
  repeat_interval       => 'FREQ=DAILY; INTERVAL=1',
  enabled               => TRUE,
  comments              => 'Calls stored procedure once a day'
  );
END;

BEGIN
     DBMS_SCHEDULER.create_job(
    job_name        => 'SHELL_JOB',
    repeat_interval  => 'FREQ=DAILY; BYHOUR=2',
    job_type         => 'EXECUTABLE',
    job_action       => '/u01/app/oracle/admin/tools/shell_job.sh',
    enabled          => TRUE,
    comments         => 'Perform stuff'
);
END;
4 голосов
/ 13 марта 2009

Стандартным подходом для этого будет использование dbms_jobs для планирования задания, вызывающего процедуру.

Если есть какое-либо предварительное условие, задание может проверить предварительное условие. Если оно выполнено, задание продолжается, если нет, оно перепланирует себя и завершается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...