当前位置: 代码迷 >> Oracle管理 >> 关于序列有关问题不解
  详细解决方案

关于序列有关问题不解

热度:22   发布时间:2016-04-24 05:06:43.0
关于序列问题不解
我先创建一个序列
SQL code
CREATE SEQUENCE kk_sequenceINCREMENT BY 1START WITH 1NOMAXVALUENOCYCLENOCACHE

然后我创建一个表
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 掉 重新创建试试看 
  相关解决方案