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