作为Oracle数据库对象,利用序列可以生成唯一的整数。一般利用序列生成主键值。
一个序列的值是由特殊的Oracle程序自动生成的,因此,序列避免了在应用层实现序列而引起的性能瓶颈。
Oracle序列允许同时生成多个序列号,而每个序列号是唯一的。当一个序列号生成时,序列是递增的,独立于事务的提交与回滚。允许设计默认序列,不需要指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。
1. 建立序列语法
--序列 create sequence [schema.]sequence_name [increment by n] [start with n] [maxvalue n|nomaxvalue] [minvalue n|nominvalue] [cycle|nocycle] [cache|nocache] [order|noorder]; --说明: /* INCREMENT BY: 指定序列号之间的间隔,该值可以为正或者负整数,但不可为0. 默认值为1; START WITH: 指定生成的第一个序列号,在升序时,序列从比最小值大的值开始,默认值为序列的最小值。对于降序,序列从比最大值小的值开始,默认值为序列的最大值; MAXVALUE: 指定序列可生成的最大值; NOMAXVALUE: 为升序指定最大值为POWER(10,27),为降序指定最大值为-1; MINVALUE: 指定序列的最小值; NOMINVALUE: 为升序指定最小值为1,为降序指定的最小值为POWER(-10,26); CYCLE:以指示在达到它的最大值或最小值之后,该序列将继续产生值。在一个上升序列到达它的最大值后,它会产生最小值。在一个递减序列到达它的最小值之后,它会产生最大值。 NOCYCLE:当序列到达最大值或者最小值后,该序列不能产生值;这是默认的选项; CACHE:指定数据库在内存中预分配多少整数值用于快速访问。这个整数值可以是小于等于28位,最小值为2. 最大缓存的值必须小于等于下面公式计算出的值: (CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT) NOCACHE: 指定数据库不预分配缓存值。如果没有指定CACHE和NOCACHE,数据库默认缓存20个序列值; ORDER: 指定order条件保证序列按请求顺序生成。此条件适用于RAC环境; NOORDER: 不保证序列按请求顺序生成; 默认是NOORDER; * /
2. 创建序列
create sequence ODS_USER_INFO_SEQ INCREMENT BY 1 START WITH 1 MINVALUE 1 MAXVALUE 9999999999999999 NOCYCLE CACHE 30;
--语法:
ALTER SEQUENCE [schema.]sequence_name [INCREMENT BY n] [MAXVALUE n|NOMAXVALUE] [MINVALUE n|NOMINVALUE] [CACHE n|NOCACHE] [ORDER|NOORDER]; /* 说明: 修改未来序列值的增量; 设置或者撤销最小值或最大值; 改变缓冲序列的数目; 指定序列号是否有序; */
--示例:
alter sequence ODS_USER_INFO_SEQ increment by 2;
4. 使用NEXTVAL和CURRVAL来查看序列的值
在序列创建完成后,必须先执行select [schema.]sequence_name.NEXTVAL然后查询CURRVAL查看当前序列,否则会报以下错误:
--先执行nextval:
--在查询序列当前值CURRVAL:
5. NEXTVAL and CURRVAL的使用限制
CURRVAL and NEXTVAL can be used in the following places: 适用场景
· VALUES clause of INSERT statements
· The SELECT list of a SELECT statement
· The SET clause of an UPDATE statement
CURRVAL and NEXTVAL cannot be used in these places: 不能用于以下场景
· A subquery 子查询
· A view query or materialized view query 视图或物化视图查询
· A SELECT statement with the DISTINCT operator 含distinct关键字查询
· A SELECT statement with a GROUP BY or ORDER BY clause带order by 查询语句
· A SELECT statement that is combined with another SELECT statement with the UNION,INTERSECT,or MINUS set operator含union,interest,minus操作符
· The WHERE clause of a SELECT statement用在where条件中
· DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement 列的默认值
· The condition of a CHECK constraint check约束
6. 删除序列
--语法
DROP SEQUENCE [schema.]sequence_name;
--实例:
--删除序列 drop sequence ODS_USER_INFO_SEQ;
本文只是介绍了序列的基本操作,关于序列的应用,会包含在后续章节实际应用中。
-------------------本文系原创,转载请标明出处----------------------------------------------
如果遇到任何问题,请给予指正, 谢谢!
原文链接:https://www.f2er.com/oracle/211426.html