现象:一个seqence设置了cycle属性,但当达到最大值时,不是从start with设置的值开始循环。而是从1开始循环。
问:当sequence达到最大值时,如何指定循环的起始值。
在创建sequence时可以指定minvalue,来达到这个效果。
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as reporttest
SQL> CREATE SEQUENCE seq1
2 START WITH 100
3 INCREMENT BY 10
4 MAXVALUE 130
5 cache 2
6 CYCLE;
Sequence created
SQL> select seq1.nextval from dual;
NEXTVAL
----------
100
SQL> /
NEXTVAL
----------
110
SQL> /
NEXTVAL
----------
120
SQL> /
NEXTVAL
----------
130
-- 没有指定MINVALUE的值,当sequence达到最大值时,如果设置了cycle属性,则会从1开始循环。
SQL> /
NEXTVAL
----------
1
SQL> /
NEXTVAL
----------
11
SQL> /
NEXTVAL
----------
21
SQL> drop sequence seq1;
Sequence dropped
SQL> CREATE SEQUENCE seq1
2 minvalue 100
3 START WITH 100
4 INCREMENT BY 10
5 MAXVALUE 130
6 cache 2
7 CYCLE;
Sequence created
SQL> select seq1.nextval from dual;
NEXTVAL
----------
100
SQL> /
NEXTVAL
----------
110
SQL>
SQL> select seq1.nextval from dual;
NEXTVAL
----------
120
SQL> /
NEXTVAL
----------
130
-- 指定MINVALUE的值,当sequence达到最大值时,如果设置了cycle属性,则会从minvalue指定的值开始循环。
SQL> /
NEXTVAL
----------
100
SQL> /
NEXTVAL
----------
110
SQL>