Oracle Database之序列(Sequence)

前端之家收集整理的这篇文章主要介绍了Oracle Database之序列(Sequence)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

作为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;


3. 修改序列

--语法:

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

猜你在找的Oracle相关文章