数据库序列重置为某个固定值

我们在使用数据存储数据的时候,总是会使用到数据序列这个东西,但是有时候又由于业务需求,和更利于维护数据信息,需要将序列重置到某个固定值

这样便于生成下一个序列号,这里我记录了两种方法:

1) 直接使用SQL进行序列重置:

  

 Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。

    有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,把递增改为负的这个值(反过来走),然后再改回来。

    假设需要修改的序列名:seq_name

  1. 获取seq_name的nextval值

    SELECT seq_name.nextval FROM dual;

    假设得到的结果是 555

  2. 调整增长值

    ALTER SEQUENCE seq_name INCREMENT BY -554;

    注意此处是 -(n-1)

  3. 重新获取seq_name的nextval值

    SELECT seq_name.nextval FROM dual;

    此时获取nextval就重置为1了

  4. 重新修改调整值为1

    ALTER SEQUENCE seq_name INCREMENT BY 1;
    2)在存储过程或者包中重置

    procedure seq_reset(v_seqname varchar2) as
    n number(10);
    tsql varchar2(100);
    begin
    execute immediate 'select '||v_seqname||'.nextval from dual' into n;
    n:=-(n-1);
    tsql:='alter sequence '||v_seqname||' increment by '|| n;
    execute immediate tsql;
    execute immediate 'select '||v_seqname||'.nextval from dual' into n;
    tsql:='alter sequence '||v_seqname||' increment by 0';
    execute immediate tsql;
    end seq_reset;

posted @ 2019-06-11 21:57  沧凉  阅读(624)  评论(0)    收藏  举报