当前使用的oracle版本如下:
创建序列:
CREATE SEQUENCE seq_test
INCREMENT BY 1 序列每次增加的值,负数表示递减,缺省值为1
START WITH 1 序列的初始值,缺省值为1
NOMAXVALUE 序列可生成的最大值,缺省值为nomaxvalue
NOCYCLE 定义当序列达到最大/小值后是否循环,缺省值为不循环;nocycle:不循环;cycle:循
环
NOCACHE; nocache表示不设置缓存;使用缓存可以提高序列的性能,但数据库出错时会造成数据丢失使序列不连续
查看当前用户下的所有序列:
select * from user_sequences;
查看所有用户下的所有序列:
select * from all_sequences;
1:创建成功后,使用select seq_test.nextval from dual; 查询序列下一个值
2:使用select * from dba_sequences where sequence_name = 'SEQ_TEST'; 查询序列是否创建成功
Tips:oracle序列名都是大写,新建时可以用小写字母命名,但系统默认大写,查询时要全用大写字母,如下图所示,用英文大写可以查出序列值,使用小写字母则查不到
使用序列为数据库主键时,由于人为手动操作数据表,导致主键不再连续。程序中使用序列生成的主键值发生冲突时,可以通过下面语句更改序列值,如下图通过查询获得新的序列值:
ALTER SEQUENCE SEQ_TEST
INCREMENT BY 10 修改的数值,在原来数值上相加
最后,删除不要的序列,使用 DROP SEQUENCE SEQ_TEST ,通过查询确认删除成功
注意:当没有设置最大值时,且没有设置循环时,当再次执行下一个序列时就会报错:
[SQL]SELECT SEQ_TEST.NEXTVAL FROM DUAL
[Err] ORA-08004: sequence SEQ_TEST.NEXTVAL exceeds MAXVALUE and cannot be instantiated 超过MAXVALUE,无法实例化
1:使用:ALTER SEQUENCE SEQ_TEST NOMAXVALUE INCREMENT BY 1
查询后发现最大值进行了更改:
2:设置序列当序列达到最大/小值后循环:
alter sequence SEQ_TEST cycle ;
总结:创建序列时要么设置NOMAXVALUE (序列可生成的最大值),要么设置序列达到设置值之后可以循环CYCLE,否则等序列值接近最大值,就会如上述报错