序列伪列
序列(Sequence)是数据库按照一定规则生成的自增数字序列号,通常是一组等间隔的数 值(为数字类型)。因其自增的特性,通常被用作主键和唯一键。
序列的取值方法
序列有如下两种取值方法:
-
CURRVAL:返回序列的当前值。 -
NEXTVAL:返回序列的下一个自增值。
使用序列时,必须在 CURRVAL 和 NEXTVAL 前带上序列的名称,并用句点(.)引用。
例如,序列的名称为 SEQ_FOO,则可以通过 SEQ_FOO.CURRVAL 获取 SEQ_FOO 序列的当前值。同样,可以通过 SEQ_FOO.NEXTVAL 获取 SEQ_FOO 序列的下一个自增值。
序列的使用限制
- 不能与
HAVING、ORDER BY和GROUP BY等语句同时使用。 - 不能在子查询中出现(
INSERT INTO SELECT的情况除外)。 - 不能出现在
WHERE表达式中。
序列的使用
序列 CURRVAL 和 NEXTVAL 的值可以用于以下位置:
-
顶层
SELECT语句的选择列表中。 -
INSERT语句中的VALUE子句中。 -
UPDATE语句中的SET子句中。
单独使用查询 Sequence 的示例如下:
SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL; /*每执行一次 Sequence 号就会增加*/
SELECT SEQUENCE_NAME.CURRVAL FROM DUAL; /*执行多少次 Sequence 号都不会变化*/
创建序列时,需要明确其初始值和步长。第一次引用 NEXTVAL 将返回序列的初始值,后续对 NEXTVAL 的引用将按照上一次序列的返回值加上序列定义的步长后返回一个新值。任何时候对 CURRVAL 的引用,都将返回当前序列的值,即最后一次对 NEXTVAL 引用时返回的值。
在会话中引用序列的 CURRVAL 伪列前,都应首先应用序列的 NEXTVAL 伪列来初始化本次会话的序列值。