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;
--语法: 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查看当前序列,否则会报以下错误:
--在查询序列当前值CURRVAL:
5. NEXTVAL and CURRVAL的使用限制
6. 删除序列 --语法 DROP SEQUENCE [schema.]sequence_name; --实例: --删除序列 drop sequence ODS_USER_INFO_SEQ; 本文只是介绍了序列的基本操作,关于序列的应用,会包含在后续章节实际应用中。
-------------------本文系原创,转载请标明出处---------------------------------------------- 如果遇到任何问题,请给予指正, 谢谢! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |