• 利用Oracle定时任务重置序列


    业务需求是:二元化编号规则:RYH+年月+001(开始),按月计算,每月1号重置为001

    数据库中已有序列和函数如下:

     解决方法:采用Oracle定时任务,每月1号重置该序列从1开始增长,SQL如下:

    select GET_RYH_NO from dual;
    
    select SEQ_RYH_NO_ID.NEXTVAL from dual;
    
    select * from user_jobs;/*查询定时任务*/
    
    /*新建每月01号重置二元化序列为1起始的存储过程*/
    CREATE OR REPLACE
    procedure RESET_SEQ_RYH_NO_ID AS
      n    NUMBER(10);
      tsql VARCHAR2(100);
    begin
        if TO_CHAR(SYSDATE,'DD') = '01' then /*每月1号重置*/
      EXECUTE IMMEDIATE 'select SEQ_RYH_NO_ID.nextval from dual'
        INTO n;
      n    := - (n - 1);
      tsql := 'alter sequence  SEQ_RYH_NO_ID increment by ' || n;
      EXECUTE IMMEDIATE tsql;
      EXECUTE IMMEDIATE 'select  SEQ_RYH_NO_ID.nextval from dual'
        INTO n;
      tsql := 'alter sequence SEQ_RYH_NO_ID increment by 1';
      EXECUTE IMMEDIATE tsql;
        end if;
    end RESET_SEQ_RYH_NO_ID;
    
    /*定义定时任务*/
    declare
      job number;
    BEGIN
      DBMS_JOB.SUBMIT(  
            JOB => job,  /*自动生成JOB_ID*/  
            WHAT => 'RESET_SEQ_RYH_NO_ID;',  /*需要执行的存储过程名称或SQL语句*/  
            NEXT_DATE => sysdate,  /*初次执行时间*/  
            INTERVAL => 'trunc(sysdate+1)' /*每隔1天执行一次*/
          );  
      commit;
    end;
    
    /*移除定时任务*/
    begin
      dbms_job.remove(126);/*括号中传入定时任务id*/
    end;
  • 相关阅读:
    hrbust1841再就业(状态压缩dp)
    并查集 poj2236
    JavaScript 常用单词整理
    HTML/CSS 常用单词整理
    HTML/CSS 知识点
    JavaScript 知识点
    ArcGIS裁剪影像数据
    小小程序员
    ArcGIS平面阴影制作
    前端相关的seo技术
  • 原文地址:https://www.cnblogs.com/alphajuns/p/11839888.html
Copyright © 2020-2023  润新知