zoukankan      html  css  js  c++  java
  • 【转】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;  //还原

    可以写个存储过程,以下是完整的存储过程,然后调用传参即可:

     1 create or replace procedure seq_reset(v_seqname varchar2)
     2 as cur_seq number(28);
     3    tsql varchar2(200);
     4 begin
     5    execute immediate 'select ' || v_seqname || '.nextval from dual' into cur_seq;
     6    cur_seq:=-(cur_seq-1);
     7    tsql:='alter sequence ' || v_seqname || ' increment by ' || cur_seq;
     8    execute immediate tsql;
     9    execute immediate 'select ' || v_seqname || '.nextval from dual' into cur_seq;
    10    tsql:='alter sequence ' || v_seqname || ' increment by 1';
    11    execute immediate tsql;
    12 end seq_reset;
    13 /

    需要调用时,执行(如sequence名称为SEQ_QT_PRCS_ID):

    1 BEGIN
    2     seq_reset('SEQ_QT_PRCS_ID');
    3 END;
    4 /

    转载自《Oracle重置序列(不删除重建方式)》

  • 相关阅读:
    forward和redirect的区别
    转 jsp中 session的简单用法
    20_学生选课数据库SQL语句练习题1
    _学生选课数据库SQL语句练习题
    输入输出2
    接口提
    输入输出流3
    获取当前时间并显示在网页上
    简单的权限管理
    java关于时间
  • 原文地址:https://www.cnblogs.com/codingmengmeng/p/11044742.html
Copyright © 2011-2022 走看看