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;