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

     declare 
    n number(10); 
    v_startnum number(10):=10000001;--从多少开始 
    v_step number(10):=1;--步进 
    tsql varchar2(200); 
    v_seqname varchar2(200):='MIP_JF_SEQUENCE';--序列名 
    begin 
    execute immediate 'select '||v_seqname||'.nextval from dual' into n; 
    n:=v_startnum-n-v_step;--从10000001开始 
    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 '||v_step; 
    execute immediate tsql; 
    end; 




    Oracle重置序列(不删除重建方式) 
    Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。 
    不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。 
    假设需要修改的序列名:seq_name
     
     
    CREATE SEQUENCE seq_name
    INCREMENT BY 1 
    START WITH 1 
    NOMAXvalue 
    NOCYCLE 
    CACHE 10; 

    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;

    ################################################
    CREATE SEQUENCE seq_name
    INCREMENT BY 1 
    START WITH 1 
    NOMAXvalue 
    NOCYCLE 
    CACHE 10; 


    CREATE SEQUENCE seq_name2
    INCREMENT BY 1 
    START WITH 1 
    NOMAXvalue 
    NOCYCLE 
    CACHE 10; 


    CREATE SEQUENCE seq_name3
    INCREMENT BY 1 
    START WITH 1 
    NOMAXvalue 
    NOCYCLE 
    CACHE 10; 




    创建用于获取所有序列名,
     select sequence_name from user_sequences;
     
      select sequence_name from all_sequences where sequence_owner='SCOTT';




  • 相关阅读:
    制作openresty的docker镜像 + nginx笔记 调试rewrite和location Nginx 学习笔记
    C# winform在WebBrowser下获取完整的Cookies(包括含HTTPOnly属性的)
    vscode代码切换大小写的教程
    C#中的Guid
    .NET Framework 版本和依赖关系
    将 Excel 数据导入 SQL Server数据库
    sqlserver各版本的介绍对比
    使用 Visual Studio Code 创建并运行 Transact SQL 脚本
    SQL转Linq工具的使用——Linqer 4.6
    对象之间的映射(AutoMapper集成)
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/765fb85e8dcd7ed01c449d14fadc904f.html
Copyright © 2011-2022 走看看