如何自动将结束年份的最后一天的序列号重置? [英] How to reset sequence number every last day of the ending year automatically?

查看:88
本文介绍了如何自动将结束年份的最后一天的序列号重置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有可能每年自动重置序列号?例如,在12月31日,序列为3465,在1月1日应为0001.

Is there is any possibility to reset the sequence number every year automatically ? For example on 31 Dec the sequence is 3465, it should be 0001 on 1st January .

现在我通过下面的查询手动将其重置

For now I reset it by below query manually

select p_seq_name.nextval from dual;
alter sequence p_seq_name increment by -3465 minvalue 0;
select p_seq_name.nextval from dual;
alter sequence p_seq_name increment by 1 minvalue 0;

谢谢

推荐答案

首先,您必须创建一个包含所提到的SQL的过程.然后,您必须创建一个计划作业,该作业将执行该过程,并且该作业将每年运行一次.

First you have to create a procedure which contain the SQL as you mention. Then you have to create a schedule job which will execute the procedure and this job will run once in a year.

CREATE OR REPLACE PROCEDURE RESET_SEQUENCE
IS
v_next_value number;
v_sequence_name varchar2(100):='SEQUENCE01';
begin
    execute immediate   'select ' || v_sequence_name || '.nextval from dual' INTO v_next_value;
    execute immediate   'alter sequence ' || v_sequence_name || ' increment by -' || v_next_value || ' minvalue 0';
    execute immediate  'select ' || v_sequence_name || '.nextval from dual' INTO v_next_value;
    execute immediate  'alter sequence ' || v_sequence_name || ' increment by 1 minvalue 0';
END RESET_SEQUENCE;
/



BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'RESET_SEQ_YEARLY'
      ,start_date      => TO_TIMESTAMP_TZ('2016/01/01 10:20:41.299669 Asia/Dacca','yyyy/mm/dd hh24:mi:ss.ff tzr')
      ,repeat_interval => 'FREQ=YEARLY;BYMONTH=DEC; BYMONTHDAY=31;BYHOUR=23;BYMINUTE=59;BYSECOND=59'
      ,end_date        => NULL
      ,job_class       => 'DEFAULT_JOB_CLASS'
      ,job_type        => 'PLSQL_BLOCK'
      ,job_action      => 'begin
                                    RESET_SEQUENCE;
                                    end;'
      ,comments        => 'Last day of the year'
    );
   SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'RESET_SEQ_YEARLY');
END;
/

这篇关于如何自动将结束年份的最后一天的序列号重置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆