日期:2014-05-17  浏览次数:20821 次

为什么在dual表中查询新序列的nextval是从1开始,而在表中插入新的序列的nextval是从2开始的?
SQL> create sequence cs2;

序列已创建。

SQL> create table cs3(c int);

表已创建。

SQL> insert into cs3 values(cs2.nextval);

已创建 1 行。

SQL> select * from cs3;

  C
----------
  2


------解决方案--------------------
因为你已经做了select cs2.nextval from dual,所以此时的值为1
当你再做insert into cs3 values(cs2.nextval);此时当然是2了。
------解决方案--------------------
楼上正解。
------解决方案--------------------
楼上正解。
------解决方案--------------------
因为你已经做了select cs2.nextval from dual,所以此时的值为1
当你再做insert into cs3 values(cs2.nextval);此时当然是2了。 

------解决方案--------------------
序列的原理就是你调用一次,也就是查一次就自动加上你设置的值。
所以你查了1次1,现在插入就是2,再查就是3,序列就是不停的增加,
如果想让这个序列表小,那么只能删了这个序列重新创建,但是要考虑
你插入值唯一性。
------解决方案--------------------
额 我测试了,的确。 而且 在执行完insert 后 查询 select cs2.currval from dual 居然是未定义。。
------解决方案--------------------
create sequence cs2
有什么可郁闷的
minvalue,maxvalue,start with,increament by 你一个都没有,你知道它从几开始啊?
------解决方案--------------------
是有点2