序列:是用来生成唯一、连续的整数的数据库对象。序列通常用来自动生成主键或唯一键的值。
1. 创建序列语法如下:
Create SEQUENCE sequence_name
[START WITH integer]
[INCREMENT BY integer]
[MAXVALUE integer|NOMAXVALUE]
[MINVALUE integer|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE interger|NOCACHE];
其中:START WITH: 是指定要生成的第一个序列号。对于升序序列,其默认值为序列的最小值。对于降序序列,其默认值为序列的最大值。
INCREMENT BY:是用于指定序列号之间的间隔。其默认值为1。如果integer为正值,则生成的序列将按升序排列,否则按降序排列。
MAXVALUE: 指定序列可以生成的最大值。
NOMAXVALUE: 这是默认选项,将升序序列的最大值设为10的27次幂,将降序序列的最大值设为-1。
MINVALUE: 指定序列的最小值。MINVALUE必须小于或等于START WITH的值,并且必须小于MAXVALUE。
NOMINVALUE: 这是默认选项,将升序序列的最小值设为1,将降序序列的最小值设为-10的26次幂。
CYCLE: 指定序列在达到最大值或最小值后,将继续从头开始生成值。
NOCYCLE: 这是默认选项。指定序列在达到最大值或最小值后,将不能再继续生成值。
CACHE: 使用CACHE选项可以预先分配一组序列号,并将其保留在内存中,这样可以更快的访问序列号。
NOCACHE: 此项则不会为加快速度而预先分配序列号。如果在创建序列时忽略了CACHE和NOCACHE选项,Oracle将默认缓存20个序列号。
示例3:Create SEQUENCE toys_seq
START WITH 10
INCREMENT BY 2
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 30;
2. 访问序列:可以通过CURRVAL和NEXTVAL伪列来访问该序列的值。
示例4:演示从序列toys_seq中选择值插入toys表中的toyid列。执行成功将会在该表的toyid列插入值"P10"和"P12"。
INSERT INTO toys(toyid,toyname,toyprice) values('p'||toys_seq.NEXTVAL,'TWENTY',25);
INSERT INTO toys(toyid,toyname,toyprice) values('p'||toys_seq.NEXTVAL,'MAGIC PENCIL',75);
示例5:演示如何查看序列当前值
Select toys_seq.CURRVAL from dual;
3. 更改序列:ALTER SEQUENCE命令用于设置或删除MINVALUE或MAXVALUE、修改增量值、修改缓存中的序列号的数目。
修改序列语法如下:注意,不能修改序列的START WITH参数。在修改序列时,应注意升序序列的最小值应小于最大值。
ALTER SEQUENCE [schema.]sequence_name
[INCREMENT BY integer]
[MAXVALUE integer|NOMAXVALUE]
[MINVALUE integer|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE interger|NOCACHE];
示例6:演示如何设置一个新的MAXVALUE,并为toys_seq序列打开了CYCLE。
ALTER SEQUENCE toys_seq
MAXVALUE 5000
CYCLE;
可以查询字典视图User_Sequences来查看用户所创建的序列的详细信息
4.删除序列语法:Drop SEQUENCE toys_seq;