Oracle序列问题:为什么序列是从12开始?

【脚本如下】:
DROP SEQUENCE myseq;
DROP TABLE testseq;
CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 10;
CREATE TABLE testseq(
next NUMBER,
curr NUMBER);
INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
SELECT * from testseq;
------------------------------------------------------------------------------------------
【结果如下】:
DROP SEQUENCE myseq 成功。
DROP TABLE testseq 成功。
CREATE SEQUENCE 成功。
CREATE TABLE 成功。
1 行 已插入
1 行 已插入
1 行 已插入
NEXT CURR
---------------------- ----------------------
12 12
14 14
16 16
3 rows selected

书上的结果是10,12,14,但我怎么试都是结果加2...
实在找不出原因,请帮忙解答下,谢谢!

每次登入用户需要用序列.nextval来进行初始化才能使用序列.currval。而使用每次使用序列.nextval序列号自动增量。问题中序列初始值是10,使用一次序列.nextval就变成12了。如果按以下方式操作就能从10开始插入记录了。
DROP TABLE testseq;
CREATE TABLE testseq(next NUMBER,curr NUMBER);
DROP SEQUENCE myseq;
CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 10;
INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
rollback;
DROP SEQUENCE myseq;
CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 10;
INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
SELECT * from testseq;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-09
楼上的回答给力。
建议楼主把语句中的VALUES的两个值顺序颠倒一下试试:
  INSERT INTO testseq(next,curr) VALUES(myseq.currval,myseq.nextval);
第2个回答  2012-11-09
真是奇怪啊, 不知道是不是环境问题.
我直接复制楼主的 SQL 语句, 执行结果如下:

SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 11月 9 09:38:22 2012
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 10;
序列已创建。
SQL>
SQL> CREATE TABLE testseq(
2 next NUMBER,
3 curr NUMBER);

表已创建。
SQL> SQL> INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
已创建 1 行。
SQL> INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
已创建 1 行。
SQL> INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);
已创建 1 行。
SQL> SQL> SELECT * from testseq;
NEXT CURR
---------- ----------
10 10
12 12
14 14
第3个回答  2012-11-09
10的nextval是12,参考书问题吧,你是看007还是042,电脑不会给出错误答案的。