sequence问题 比如主键是 1,3,5,7,9,11 中间跳号了用什么方法可以把主键重新排列为 1,2,3,4,5 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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与主键值之间的差值实现 PL/SQL中树结构查询的问题 纠结于Oracle Oracle计算精度问题(有点难) oracle的关于“ORA-03113”的怪问题 netca报错 ORACLE9I中作业问题? 小问题三个,自加一列,select sysdate,取字符的前几位或后几位 请问如何从View里获得各个Column的Schema? 有关proc 分区表怎么查询比不分区还要慢? 用exp和imp导出导入图象导入不成功 如何 禁用/启用某个表上的触发器?
序列已创建。
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与主键值之间的差值实现