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;//还原

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

    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;

  • 相关阅读:
    mem系函数总结
    shell----删除文件中的^M
    为tcp的connect设置超时时间
    ue-edit设置显示函数列表
    bep-10翻译
    mysql--慢查询,卡死等处理
    mongodb---js脚本操作速记
    佛主保佑,永无bug
    【php】中【event】之实现方式
    BI任务列表
  • 原文地址:https://www.cnblogs.com/huangzhen/p/2181257.html
Copyright © 2011-2022 走看看