您可在 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 INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL);
在前面的示例中,数据库服务器将增加的值(或该序列的第一个值,其为 1)插入到表的 col1 和 col2 列内。
UPDATE tab1 SET col2 = seq_2.NEXTVAL WHERE col1 = 1;
在前面的示例中,seq_2 序列的增加的值(其为 2)替代 col2 中 col1 等于 1 的值。
SELECT seq_2.CURRVAL, seq_2.NEXTVAL FROM tab1;
在前面的示例中,数据库服务器从 CURRVAL 和 NEXTVAL 表达式返回增加的值的两行,3 和 4。对于 tab1 的第一行,数据库服务器为 CURRVAL 和 NEXTVAL 返回增加的值 3;对于 tab1 的第二行,它返回增加的值 4。