0%

oracle 11g 的序列

1. 含义

序列是用于生成唯一、连续序号的对象,序列可以是升序的,也可以是降序的。

2. 创建序列

使用CREATE SEQUENCE语句创建序列,创建示例如下所示:

1
2
3
4
5
6
7
create sequence stu_seq
start with 1 -- 从 1 开始,可选,默认为1
increment by 1 -- 每次增加 1,支持正负数,可选,默认为1
maxvalue 2000 -- 序列最大数,可选
minvalue 1 --序列最小值,可选,默认为1
nocycle -- 序列不循环,即取到最大值不再从起始值继续开始,可选,默认不循环
cache 10; -- 指定内存中预先分配的序号数。缓存 10 条序列值,避免取序列时 oracle 都要计算获取一次,可选,默认20

3. 查询序列信息

普通用户可以通过查询 user_sequences 表来查询序列定义信息,具体示例如下所示:

1
2
3
4
5
SQL> select * from user_sequences where sequence_name = 'STU_SEQ';

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- ------------ ---------- ---------- ---------- -----------
STU_SEQ 1 2000 1 N N 10 1

4. 使用序列

通过序列的伪列来访问序列的值,NEXTVAL 返回序列的下一个值,CURRVAL 返回序列的当前值。第一次使用序列中的值的时候,要使用 NEXTVAL。

1
2
3
4
5
SQL> select stu_seq.nextval from dual;

NEXTVAL
----------
1

5. 修改序列

使用ALTER SEQUENCE语句修改序列,但是不能更改序列的START WITH参数。具体示例如下:

1
2
3
4
5
6
7
8
9
10
SQL> alter sequence stu_seq maxvalue 5000 cycle;

Sequence altered


SQL> select * from user_sequences;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- ------------ ---------- ---------- ---------- -----------
STU_SEQ 1 5000 1 Y N 10 2

6. 删除序列

使用DROP SEQUENCE语句删除序列,具体示例如下:

1
drop sequence stu_seq;
------ 本文结束------