#CREATE SEQUENCE
# 通用描述
CREATE SEQUENCE用于创建一个序列对象,包括升序序列号生成器(生成的序列号为正数)和降序序列号生成器(生成的序列号为负数)。
序列号生成器的数据类型只能为整数。
对于升序序列号生成器,生成的序列号不能小于1;对于降序序列号生成器,生成的序列号不能大于-1。
分布式部署中用户无法执行本语句。
# 语句定义
create sequence::=
# sequence
该语句用于指定要创建的序列号生成器的名称,不可省略,且需符合YashanDB的对象命名规范。
如该语句后面的语句全部省略,则会生成一个从1开始,每次增长1,无最大数限制(但满足操作系统最大整数限制)的升序序列号生成器。
示例
CREATE SEQUENCE seq_yashan1;
SELECT seq_yashan1.NEXTVAL FROM DUAL;
SEQ_YASHAN1.NEXTVAL
---------------------
1
# increment by
该语句用于指定序列号生成器的增量(Interval),即下一序列号值=当前序列号值+增量。该值不能为0,省略则默认为1。
本值为正数即表示创建的是一个升序序列号生成器,为负数则表示创建的是一个降序序列号生成器。
# start with
该语句用于指定序列号生成器的起始值,该值需介于MINVALUE和MAXVALUE之间。对于升序序列号生成器,本值不能小于1;对于降序序列号生成器,本值不能大于-1。省略则默认为1(升序序列号生成器)或-1(降序序列号生成器)。
# maxvalue|nomaxvalue
该语句用于指定序列号生成器的最大值,对于升序序列号生成器,本值不能小于1;对于降序序列号生成器,本值不能大于-1。
对于升序序列号生成器,NOMAXVALUE表示为操作系统的最大正整数数值;对于降序序列号生成器,NOMAXVALUE表示为-1。
本语句省略时默认为NOMAXVALUE。
# minvalue|nominvalue
该语句用于指定序列号生成器的最小值,对于升序序列号生成器,本值不能小于1;对于降序序列号生成器,本值不能大于-1。
对于升序序列号生成器,NOMINVALUE表示为1;对于降序序列号生成器,NOMAXVALUE表示为操作系统的最大负整数数值。
本语句省略时默认为NOMINVALUE。
# cycle|nocycle
该语句用于指定当生成的序列号到达MAXVALUE(升序序列号生成器)或MINVALUE(降序序列号生成器)后,是否开启序列号循环。
- CYCLE:对于升序序列号生成器,当要生成的序列号大于MAXVALUE时,将该序列号置为MINVALUE;对于降序序列号生成器,当要生成的序列号小于MINVALUE时,将该序列号置为MAXVALUE。
- NOCYCLE:当要生成的序列号大于MAXVALUE(升序序列号生成器)或小于MINVALUE(降序序列号生成器)时,不产生值并返回错误信息。
本语句省略时默认为NOCYCLE。
示例
--创建一个最大值为20的升序序列号生成器
CREATE SEQUENCE seq_yashan3 INCREMENT BY 10 MAXVALUE 20 CYCLE NOCACHE;
--当要生成的序列号超过20时,重新从最小值1开始
SELECT seq_yashan3.NEXTVAL FROM DUAL;
SEQ_YASHAN3.NEXTVAL
---------------------
1
SELECT seq_yashan3.NEXTVAL FROM DUAL;
SEQ_YASHAN3.NEXTVAL
---------------------
11
SELECT seq_yashan3.NEXTVAL FROM DUAL;
SEQ_YASHAN3.NEXTVAL
---------------------
1
--创建一个含自增列的表
CREATE TABLE area(area_no INT DEFAULT seq_yashan3.NEXTVAL, area_name VARCHAR2(60));
# order|noorder
ORDER/NOORDER用于指定是否保证序列号按请求的先后顺序生成。
在单机部署中,YashanDB已保证了序列号按照请求的先后顺序生成,无需进行指定。本语句只用于语法兼容。
# cache|nocache
该语句用于指定是否在内存中对序列号进行预分配,省略则默认为在内存中预分配20个序列号。
- NOCACHE:不在内存中进行序列号预分配。
- CACHE:指定预分配序列号的个数。当同时指定NOCYCLE时,本值可为任意一个非0正整数;当同时指定CYCLE时,本值的大小不能超过序列号生成器一个循环内可产生的序列号个数,即小于
(MAXVALUE-MINVALE)/ABS(INCREMENT BY) +1
。
示例
--由于((11-1)/10)+1=2,而cache值需小于此值,返回错误
CREATE SEQUENCE seq_yashan4 INCREMENT BY 10 MAXVALUE 11 CYCLE CACHE 2;
YAS-02096 sequence param CACHE error, number of CACHE must be less than one cycle