Oracle重置序列(不删除重建方式)

 

Oracle 中的序列咱们通常用来生成流水号,因此须要进行重置(如天天凌晨重置一次),咱们虽然能够经过从新编译的方式重置序列,但是这种方法会有弊端,好比致使与该序列相关的存储过程或函数失效等等,须要从新编译;因而就须要一种不编译也能够重置序列的方法——sql

 

这种方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改成负的这个值(反过来走),而后再改回来。函数

 假设须要修改的序列名:seq_namespa

一、select seq_name.nextval from dual; //假设获得结果5656rem

二、 alter sequence seq_name increment by -5655; //注意是-(n-1)编译

三、 select seq_name.nextval from dual;//再查一遍,走一下,重置为1了select

四、  alter sequence seq_name increment by 1;//还原方法

能够写个存储过程,如下是完整的存储过程,而后调用传参便可: im

create or replace 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 1';
 execute immediate tsql;
相关文章
相关标签/搜索