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

jhon_lee發表於2015-08-11
Oracle重置序列(不刪除重建方式)
Oracle中一般將自增sequence重置為初始1時,都是刪除再重建,這種方式有很多弊端,依賴它的函式和儲存過程將失效,需要重新編譯。
不過還有種巧妙的方式,不用刪除,利用步長引數,先查出sequence的nextval,記住,把遞增改為負的這個值(反過來走),然後再改回來。
假設需要修改的序列名:seq_name
1、select seq_name.nextval from dual;                     //假設得到結果5656
2、alter sequence seq_name increment by -5655;    //注意是-(n-1)
3、select seq_name.nextval from dual;                    //再查一遍,走一下,重置為1了
4、alter sequence seq_name increment by 1;          //還原 


SQL> create sequence seq_1 increment by 1 start with 1 maxvalue 999999999;
序列已建立。
SQL> 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;
 end seq_reset;
 / 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26474945/viewspace-1768243/,如需轉載,請註明出處,否則將追究法律責任。

相關文章