每小时自动运行Oracle存储过程

3

我已经在Oracle中创建了一个简单的过程。 伪代码如下:

CREATE OR REPLACE
 procedure  update_summary
 begin
  delete from summary table;
  make different calculations from different tables, insert values row by row in 
  summary table;
 end;

我希望这个程序每小时自动运行,因为如果我从应用程序的前端调用它,它需要很长时间,用户会认为页面已经挂起。非常感谢您的帮助。

1个回答

7
使用 DBMS_SCHEDULER 创建一个类似于以下的作业:
begin

    DBMS_SCHEDULER.CREATE_JOB (
         job_name           => 'CALC_JOB',
         job_type           => 'STORED_PROCEDURE',
         job_action         => 'UPDATE_SUMMARY',
         start_date         => current_timestamp,
         repeat_interval    => 'FREQ=hourly;',
         enabled            => true);

end;
/

更多详情(尤其是手册中的repeat_interval参数)请参见:http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#CIHEHDHA begin .. end只是必需的,因为SQL*Plus不允许execute命令跨越多行。如果您使用不同的SQL客户端,则可能不需要此命令。
我通常还会为作业设置日志级别,以便在USER_JOB_RUN_DETAIL中查看更多信息。
execute dbms_scheduler.set_attribute(name => 'CALC_JOB', attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_FULL);

为了完整性而言:SQL*Plus具有连字符作为续行符号,这允许跨越多行而不需要使用begin/end块。 - René Nyffenegger
只是提供信息,您也可以创建Oracle JOB。然而,它们比较老旧,使用“调度作业”是推荐的做法。 - Wernfried Domscheit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接