NEXTVAL 和 CURRVAL 运算符

您可在 SQL 语句中使用 NEXTVAL 或 CURRVAL 运算符来访问序列的值。您必须以在同一数据库中存在的序列对象的名称(或同义词)来限定 NEXTVAL 或 CURRVAL,使用格式 sequence.NEXTVAL 或 sequence.CURRVAL。表达式还可通过 owner 名称来限定 sequence,就像在 zelaine.myseq.CURRVAL 中那样。您可指定 sequence 的标识符或有效的同义词,如果存在的话。

在符合 ANSI 的数据库中,如果您不是所有者,则您必须以其所有者的名称(owner.sequence)来限定 sequence 的名称。

要随同序列使用 NEXTVAL 或 CURRVAL,您必须在该序列上有 Select 权限或在数据库上有 DBA 权限。要获取更多关于序列级权限的信息,请参阅 GRANT 语句 语句。

示例

在下列示例中,假设当前没有其他用户正在访问该序列,且用户依顺序执行这些语句。

这些示例基于下列序列对象和表:
CREATE SEQUENCE seq_2 
            INCREMENT BY 1 START WITH 1 
            MAXVALUE 30 MINVALUE 0 
            NOCYCLE CACHE 10 ORDER;
            
            CREATE TABLE tab1 (col1 int, col2 int);
            INSERT INTO tab1 VALUES (0, 0);
您可在 INSERT 语句的 Values 子句中使用 NEXTVAL(或 CURRVAL),如下列示例所示:
INSERT INTO tab1 (col1, col2) 
            VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL);

在前面的示例中,数据库服务器将增加的值(或该序列的第一个值,其为 1)插入到表的 col1 和 col2 列内。

您可在 UPDATE 语句的 SET 子句中使用 NEXTVAL(或 CURRVAL),如下列示例所示:
UPDATE tab1 
            SET col2 = seq_2.NEXTVAL
            WHERE col1 = 1;

在前面的示例中,seq_2 序列的增加的值(其为 2)替代 col2 中 col1 等于 1 的值。

下列示例展示您可如何使用 SELECT 语句的 Projection 子句中的 NEXTVAL 和 CURRVAL:
SELECT seq_2.CURRVAL, seq_2.NEXTVAL FROM tab1;

在前面的示例中,数据库服务器从 CURRVAL 和 NEXTVAL 表达式返回增加的值的两行,3 和 4。对于 tab1 的第一行,数据库服务器为 CURRVAL 和 NEXTVAL 返回增加的值 3;对于 tab1 的第二行,它返回增加的值 4。