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

关于序列问题不解
我先创建一个序列
SQL code

CREATE SEQUENCE kk_sequence
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE


然后我创建一个表
SQL code

CREATE TABLE kk(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50)
);


好了,我随便插入一条数据
SQL code
insert into kk values(kk_sequence.nextval,'kk','8888888888','FireStart')

得出的结果居然是 id=2!!!
我先查询kk表一个当前序列,跟之后的序列是多少...
SQL code
select kk_sequence.currval,kk_sequence.nextval from kk

其实那个查询结果我都不懂为什么会出现
两个都是显示 3;
然后在插入一条语句,跟上面的insert语句一模一样的
得出的结果居然是id=4!!!
各种迷惑各种不懂各种求解!!!
下面是图片全解



------解决方案--------------------
在检索序列的当前值之前,必须通过健硕序列的下一个值对序列进行初始化。对与刚创建的序列,第一次调用kk_sequence.nextval的时候,应该是对序列进行初始化,得到的应该是1, 不知道lz为什么得到的会是2, 同问? 难道是已经进行了初始化?

在2的基础上在看lz下面的问题,是可以解释的:

select kk_sequence.currval,kk_sequence.nextval from kk

这条语句,select 时先执行的是kk_sequence.nextval, 然后才是kk_sequence.currval,
应为上面得到的是2, 所以这里两个都是3。

再执行一条插入语句的时候,执行了kk_sequence.nextval, 得到的当然是4 了。




------解决方案--------------------
#5楼 得分:0回复于:2012-06-12 10:23:54挡序列被创建后,第一次使用NEXTVAL,返回应该是初始值,currval要在NEXTVAL被使用后才能使用,即初始化后才能使用CURRVAL。
理应不会出现LZ所说的情况。建议DROP 掉 重新创建试试看