業務需求是:二元化編號規則: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;