oracle - 每小时自动运行一次oracle程序

标签 oracle plsql procedure

我在 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;

我希望这个过程每小时自动运行一次,因为如果我从应用程序的前端调用它,它会非常耗时,并且用户会认为该页面已挂起。我们将非常感谢您的帮助。

最佳答案

使用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);

关于oracle - 每小时自动运行一次oracle程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24583964/

相关文章:

sql - 查询表没有授权?

database - 为什么 Oracle 不在 DBA_dependencies 中包含使用任何数据库链接创建的对象 View ?

oracle - 接收数据库链接名称作为 Oracle PLSQL 中的变量

sql - 如何调用包中的函数

mysql - 使用数组值分割逗号分隔的字符串

sql - Oracle 中的模型子句

php - [Oracle/PHP]是否可以将数组传递给 PL/SQL 过程?

exception - 无法从 PL/SQL 过程中检索错误

Mysql - Concat - 过程执行失败

mysql - 制作具有多个参数的mysql程序