zoukankan      html  css  js  c++  java
  • Oracle 重置序列

    Oracle将自增sequence重置为初始值1时,若是删除再重建,那么依赖它的函数和存储过程将失效,需要重新编译。
    
    这里利用相反的过程,利用负值步长参数,将递增值改为(sequence.NEXTVAL-1),然后再改回来。
    
     假设需要修改的序列名:seq_name
    
    1select seq_name.nextval from dual; //假设得到结果5656
    
    2alter sequence seq_name increment by -5655; //注意是-(n-1)
    
    3select seq_name.nextval from dual;//再查一遍,走一下,重置为1了
    
    4alter 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;
  • 相关阅读:
    leetcode 567 滑动窗口
    田忌赛马
    去除CSDN无用的打印边框,显示数据
    操作系统博客清单
    OpenKiwi学习笔记
    开源minigui移植
    嵌入式GUI总结
    short int 变量的取值范围
    68 进程等待机制的实现 下
    67 进程等待机制的实现 上
  • 原文地址:https://www.cnblogs.com/sallet/p/4200454.html
Copyright © 2011-2022 走看看