利用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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM