zoukankan      html  css  js  c++  java
  • sequence有关问题

    sequence问题
    比如主键是 1,3,5,7,9,11 中间跳号了。。。
    用什么方法可以把主键重新排列为 1,2,3,4,5

    ------解决方案--------------------
    update tablename set id=rownum



    通过下面的方法重置你得序列修改那个start with值

    SQL> create sequence seq_1 increment by 1 start with 1 maxvalue 999999999;
    序列已创建。
    SQL> create or replace procedure seq_reset(v_seqname varchar2) as
    2 n number(10);
    3 tsql varchar2(100);
    4 begin
    5 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
    6 n:=-(n-1);
    7 tsql:='alter sequence '||v_seqname||' increment by '|| n;--让序列一次递增-N,实现归0
    8 execute immediate tsql;
    9 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
    10 tsql:='alter sequence '||v_seqname||' increment by 1';
    11 execute immediate tsql;
    12 end seq_reset;
    13 /
    过程已创建。
    SQL> select seq_1.nextval from dual;
    NEXTVAL
    ---------
    2
    SQL> /
    NEXTVAL
    ---------
    3
    SQL> /
    NEXTVAL
    ---------
    4
    SQL> /
    NEXTVAL
    ---------
    5
    SQL> exec seq_reset('seq_1');
    PL/SQL 过程已成功完成。
    SQL> select seq_1.currval from dual;
    CURRVAL
    ---------
    1
    SQL>  



    ------解决方案--------------------
    第一种方法:
    这种方法可以实现你的要求,但要分两步做:

    (1)创建一个序列:
    create sequence minus_value
    start with 1
    minvalue 1
    increment by 1;
    (2)更新数据库列
    update yourtable set colnum=minus_value.nextval;
    如果是一个刚刚新创建的序列,则执行上面的更新语句后,可以保证主键顺序是从1开始的.

    如果你所用的序列是一个已经被用过的,则还要执行一个更新语句,
    update yourtable set colnum=colnum - <value>;
    这个value就是序列的起始值与1的差值.

    第二种方法:
    可以用ROWNUM与主键值之间的差值实现

  • 相关阅读:
    Android入门第六篇之ListView (一)
    mysql触发器的作用及语法
    查询记录时rs.previous()的使用
    Microsoft Visual C++ Runtime Library Runtime Error的解决的方法
    Ubuntu中编译链接Opencv应用的简便方式
    24点经典算法
    CMS系统简介(从简介到使用)
    编程学习资源
    Django是什么
    Thinkphp中的自动验证
  • 原文地址:https://www.cnblogs.com/hllnj2008/p/5211385.html
Copyright © 2011-2022 走看看