我们有一个系统允许用户将数据连接到数据库,以设置各种规则,这些规则用于在数据合并到主表之前对其进行更改。例如,订单可能有一条规则,根据客户的地址设置要使用的送货公司。
这最初仅用于对正在加载的数据进行操作,因此它仅限于可以从select语句调用的函数。需要注意的一点是,数据尚未出现在目标表中。
现在,我有一个需要更新另一个表的项目(很好 - 我可以使用autonomous_transaction pragma)。但是,我需要运行一些需要在数据运行之前插入数据的函数(即它们是聚合数据)。
所以,我真的想排队运行我的程序直到一段时间后(这不依赖于时间)。
我如何在Oracle中执行此操作?当我只是想做一些简单的事情时,丰富的文档是相当压倒性的。
答案 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来安排调用该过程的作业。
如果有一些先决条件,工作可以检查前提条件。如果满足,则作业继续,如果不是,则重新安排并退出。