我先创建一个序列CREATE SEQUENCE kk_sequence
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE然后我创建一个表CREATE TABLE kk(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50)
);好了,我随便插入一条数据
insert into kk values(kk_sequence.nextval,'kk','8888888888','FireStart')
得出的结果居然是 id=2!!!
我先查询kk表一个当前序列,跟之后的序列是多少...
select kk_sequence.currval,kk_sequence.nextval from kk
其实那个查询结果我都不懂为什么会出现
两个都是显示 3;
然后在插入一条语句,跟上面的insert语句一模一样的
得出的结果居然是id=4!!!
各种迷惑各种不懂各种求解!!!
下面是图片全解

解决方案 »

  1.   

    在检索序列的当前值之前,必须通过健硕序列的下一个值对序列进行初始化。对与刚创建的序列,第一次调用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 了。
      

  2.   

    简单试了一下,感觉SEQUENCE功能正常,你是否在insert之前运行过
    SELECT kk_sequence.NEXTVAL FROM dual;之类的命令呢?CREATE SEQUENCE kk_sequence
    INCREMENT BY 1
    START WITH 1
    NOMAXVALUE
    NOCYCLE
    NOCACHE;CREATE TABLE aa(id NUMBER);INSERT INTO aa VALUES (kk_sequence.NEXTVAL);SELECT * FROM aa;输出 ID
         1
      

  3.   

    挡序列被创建后,第一次使用NEXTVAL,返回应该是初始值,currval要在NEXTVAL被使用后才能使用,即初始化后才能使用CURRVAL。
    理应不会出现LZ所说的情况。建议DROP 掉 重新创建试试看
      

  4.   

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