【问题标题】:Run oracle procedure automatically every hour每小时自动运行oracle程序
【发布时间】:2014-08-26 08:43:44
【问题描述】:

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

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

【问题讨论】:

    标签: oracle plsql procedure


    【解决方案1】:

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

    【讨论】:

    • 为了完整起见:SQLPlus 有 *hyphen 作为连续字符,它允许在没有开始/结束块的情况下跨越多行
    • 作为信息,你也可以创建一个OracleJOB。但是,它们的年龄要大得多,建议使用“调度程序作业”。
    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多