序列是用于生成唯一、连续序号的对象 序列可以是升序的,也可以是降序的。
1、创建索引
语法
CREATE SEQUENCE sequence_name --sequence_name创建的序列名称
[START WITH integer] --START WITH起始值
[INCREMENT BY integer] --INCREMENT BY两个序列号的间隔
[MAXVALUE integer|NOMAXVALUE]--MAXVALUE:最大值
[MINVALUE integer|NOMINVALUE]--MINVALUE:最小值
[CYCLE|NOCYCLE] --CYCLE:达到最大或最小值时,进行从头开始生成值;NOCYCLE:不继续生成
[CACHE integer|NOCACHE]; --CACHE:预先缓存一组序列号;NOCACHE:不缓存
NOMAXVALUE:Oracle将升序序列的最大值设为 10∧27,将降序的最大值设为 -1,这是默认值。
NOMINVALUE:Oracle将升序序列的最小值设为 1,将降序的最小值设为 -10∧26,这是默认值。
注意:如果你忽略了CACHE和NOCACHE选项,Oracle将默认缓存20个序列号。
示例:
create sequence dept_seq
start with 60
increment by 10
maxvalue 10000
2、访问序列
NEXTVAL: 返回序列的下一个值
CURRVAL: 返回序列的当前值
1、查询当前索引
--查询当前的序列
select scott.dept_seq.currval from dual;
刚创建完索引,你直接查询会出错(如下)
注意:Oracle刚创建完序列后用currval查询不了当前值的,得先用nextval查询过后才能进行currval的查询。
3、更改序列
语法
ALTER SEQUENCE [schema.]sequence_name
[INCREMENT BY integer]
[MAXVALUE integer|NOMAXVALUE]
[MINVALUE integer|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE integer|NOCACHE];
注意:不能更改序列的START WITH参数。
示例:
alter sequence dept_seq
increment by 30
maxvalue 12000
4、删除序列
语法
DROP SEQUENCE [schema.]sequence_name;
示例:
drop sequence dept_seq
5、使用序列
① 在不需要并行的环境中可以选择使用序列作为主关键字。
② 使用SYS_GUID函数
--使用SYS_GUID()函数
select SYS_GUID() from dual;
注意:使用SYS_GUID()函数生成32位的唯一编码。它源自不需要对数据库进行访问的时间戳和机器标识符,这会保证创建的标识符在每个数据库里都是唯一的。