Oracle:如何“以后”运行存储过程

时间:2009-03-13 16:14:47

标签: oracle plsql

我们有一个系统允许用户将数据连接到数据库,以设置各种规则,这些规则用于在数据合并到主表之前对其进行更改。例如,订单可能有一条规则,根据客户的地址设置要使用的送货公司。

这最初仅用于对正在加载的数据进行操作,因此它仅限于可以从select语句调用的函数。需要注意的一点是,数据尚未出现在目标表中。

现在,我有一个需要更新另一个表的项目(很好 - 我可以使用autonomous_transaction pragma)。但是,我需要运行一些需要在数据运行之前插入数据的函数(即它们是聚合数据)。

所以,我真的想排队运行我的程序直到一段时间后(这不依赖于时间)。

我如何在Oracle中执行此操作?当我只是想做一些简单的事情时,丰富的文档是相当压倒性的。

2 个答案:

答案 0 :(得分:5)

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;

答案 1 :(得分:4)

标准方法是使用dbms_jobs来安排调用该过程的作业。

如果有一些先决条件,工作可以检查前提条件。如果满足,则作业继续,如果不是,则重新安排并退出。