创建序列示例

目的

使用 CREATE SEQUENCE 语句创建一个序列,该序列是一个数据库对象,多个用户可以从中生成唯一的整数。你可以使用序列自动生成主键值。

生成序列号时,序列会递增,与事务提交或回滚无关。如果两个用户同时递增相同的序列,则每个用户获取的序列号可能有间隙,因为序列号是由另一个用户生成的。一个用户永远不能获取另一个用户生成的序列号。在由一个用户生成序列值之后,该用户可以继续访问该值,而不管该序列是否由另一个用户递增。

序列号是独立于表生成的,因此相同的序列可用于一个或多个表。单个序列号可能会被跳过,因为它们是在最终回滚的事务中生成和使用的。另外,单个用户可能没有意识到其他用户正在从相同的序列中绘制。

创建序列后,你可以使用 CURRVAL 伪列访问 SQL 语句中的值,该伪列返回序列的当前值,或 NEXTVAL 伪列,它会递增序列并返回新值。

先决条件

要在自己的模式中创建序列,你必须具有 CREATE SEQUENCE 系统特权。

要在另一个用户的模式中创建序列,你必须具有 CREATE ANY SEQUENCE 系统特权。

创建序列:示例以下语句在示例模式 oe 中创建序列 customers_seq。当行添加到 customers 表时,此序列可用于提供客户 ID 号。

CREATE SEQUENCE customers_seq
START WITH     1000
INCREMENT BY   1
NOCACHE
NOCYCLE;

对 customers_seq.nextval 的第一个引用返回 1000.第二个引用返回 1001.每个后续引用将返回大于先前引用的值 1。