欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

03-017 oracle定时任务

程序员文章站 2022-05-07 16:28:48
...

每天凌晨0:00:00备份一个表,且以当天时间为准,过去7天每天备份一次。
思路:

  1. 创建一个存储过程
  2. 利用定时任务每天凌晨0:00:00执行一次

1、创建一个存储过程

create or replace procedure prc_ams_asset as
  v_date       varchar2(8); --定义日期变量
  v_dated      varchar2(8); --定义7天前日期
  v_sql        varchar2(2000); --定义动态sql
  v_sqld       varchar2(2000); --定义动态sql
  v_tablename  varchar2(30); --定义动态表名
  v_tablenamed varchar2(30); --定义动态表名
begin
  select to_char(sysdate, 'yyyymmdd') into v_date from dual; --取日期变量
  select to_char(sysdate - 7, 'yyyymmdd') into v_dated from dual; --取日期变量
  v_tablename  := 'ams_asset_info_prc' || v_date; --为动态表命名
  v_tablenamed := 'ams_asset_info_prc' || v_dated; --为动态表命名
  v_sql        := 'create table ' || v_tablename ||
                  ' as select * from ams_asset_info';
  v_sqld        := 'drop table ' || v_tablenamed;
  dbms_output.put_line(v_sql); --打印sql语句
  execute immediate v_sql; --执行动态sql
  execute immediate v_sqld; --执行动态sql
exception
  when others then
    null;
end prc_ams_asset;

创建好之后,call prc_ams_asset(); 会立即运行第一次,或者用定时任务也会立即运行第一次

2、利用定时任务每天执行一次

当前用户定时任务
select count() from user_jobs;
有权限访问的定时任务
select count(
) from all_jobs;
整个数据库所有定时任务
select count(*) from dba_jobs;

1、查出原来定时任务的JOBID

SELECT t.* FROM  dba_jobs t where what = 'PRC_AMS_ASSET;'

2、删除该定时任务

begin
  dbms_job.remove(第一步查询出的JOBID);  /*删除自动执行的job,参数是 job的id*/
  commit;
end;

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  
        WHAT => 'PRC_AMS_ASSET;',  
 next_date => to_date('22-05-2019 03:00:00', 'dd-mm-yyyy hh24:mi:ss'),
        INTERVAL => 'TRUNC(sysdate) + 1+ (0/24)' /*每天凌晨0点*/
      );  
  commit;
end;

03-017 oracle定时任务

相关标签: database