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;
相關文章
相關標籤/搜索