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;


本文只是介绍了序列的基本操作,关于序列的应用,会包含在后续章节实际应用中。


-------------------本文系原创,转载请标明出处----------------------------------------------

如果遇到任何问题,请给予指正, 谢谢!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值