ITPub博客

首页 > 数据库 > Oracle > Oracle重置序列(不删除重建方式)

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

Oracle 作者:jhon_lee 时间:2015-08-11 14:47:57 0 删除 编辑
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博客 ” ,链接:https://blog.itpub.net/26474945/viewspace-1768243/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-07-07

  • 博文量
    47
  • 访问量
    319929