NEXTVAL 和 CURRVAL 运算符

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

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

要随同序列使用 NEXTVALCURRVAL,您必须在该序列上有 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)插入到表的 col1col2 列内。

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

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

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

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