数据库序列重置为某个固定值
我们在使用数据存储数据的时候,总是会使用到数据序列这个东西,但是有时候又由于业务需求,和更利于维护数据信息,需要将序列重置到某个固定值
这样便于生成下一个序列号,这里我记录了两种方法:
1) 直接使用SQL进行序列重置:
Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。
有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,把递增改为负的这个值(反过来走),然后再改回来。
假设需要修改的序列名:seq_name
-
获取seq_name的nextval值
SELECT seq_name.nextval FROM dual;
假设得到的结果是 555
-
调整增长值
ALTER SEQUENCE seq_name INCREMENT BY -554;
注意此处是 -(n-1)
-
重新获取seq_name的nextval值
SELECT seq_name.nextval FROM dual;
此时获取nextval就重置为1了
-
重新修改调整值为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;

浙公网安备 33010602011771号