• 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';




  • 相关阅读:
    [INS-32033] Central Inventory location is not writable
    ORACLE中的PL/SQL
    Oracle几大后台进程
    2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组)
    NOIP复习资料——往年习题精选
    迪杰斯特拉dijkstar(算法个人观点)
    【USACO题库】1.4.2 The Clocks时钟.TJ
    【USACO题库】2.1.2 Ordered Fractions顺序的分数.tj
    纪中2016.10.6比赛不明总结
    纪中2016.8.17比赛不明总结
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/765fb85e8dcd7ed01c449d14fadc904f.html
Copyright © 2020-2023  润新知