• Oracle定时任务小案例


    需求简述

    一个数据表中包含此数据的录入时间,此数据的初始状态是有效,五天后系统自动置该数据的状态为无效

    方案

    1. 写一个存储过程,用于更新字段(改状态);
    2. 写一个job,用于定时执行存储过程;

    方案逻辑

    存储过程

    1. 前提条件:此数据的状态为有效状态;
    2. 获取当前系统时间;
    3. 获取数据输入时间;
    4. 计算二者差值;如果二者差值大于5,置数据状态为无效,反之,不做操作。

    Job

    1. 设置每天0:00自动执行存储过程;(为了尽快看到测试结果,这里设置时间为每分钟执行一次job。)

    测试小案例

    1. 创建表
    --创建表
    create table test(name varchar2(30), passwd varchar2(30),inputtime date,status varchar2(2));
    
    1. 插入数据
    --插入数据
    declare 
         c_name varchar2(30) := 'TestUser';
         c_pass varchar2(30) := 'TestPass';
         c_inputTime date;
         c_status varchar2(2) := '01';
    begin
      select sysdate into c_inputTime from dual;
         for i in 0..99 loop
           c_name := c_name || to_char(i);
           c_pass := c_pass || to_char(i);
           c_inputTime := c_inputTime-1;
           dbms_output.put_line('name='||c_name||', passWd='||c_pass||', inputtime='||c_inputTime||' status='||c_status);
           insert into test (name,passwd,inputtime,status) values (c_name,c_pass,c_inputTime,c_status);
           c_name := 'TestUser';
           c_pass := 'TestPass';
         end loop;
         commit;
    end;
    
    1. 存储过程
    --创建存储过程,用于更新status
    create or replace procedure pro_test is
    begin
    declare
      NUM number :=5;
      d date;
      cursor cur_test is 
      select name,inputtime,status from test where status='01' order by inputtime desc;--创建游标,用于存储结果集
      begin
      select sysdate into d from dual;--获取系统时间
      for temp in cur_test
        loop
          if round(to_number(d-temp.inputtime))>NUM then
            update test set status='00' where name = temp.name;--更新表数据
          end if;
        end loop;
        commit;--提交事务
      end;
    end pro_test;
    
    1. 定时任务
    declare
        job_test number;
    begin
        dbms_job.submit(job_test, 'pro_test;',sysdate, 'sysdate+1/24/60');--每分钟执行一次
    end;
    
  • 相关阅读:
    「自己开发直播」实现nginx-rtmp-module多频道输入输出与权限控制
    抢购代码留存
    抢红包代码留存
    Table '' is marked as crashed and should be repaired 解决方法
    extundelete实现Linux下文件/文件夹数据恢复!
    RedHat设置Yum源
    MFC 自定义消息
    单例模式
    工厂模式(转)
    hash_map
  • 原文地址:https://www.cnblogs.com/pinnsvin/p/8557698.html
Copyright © 2020-2023  润新知