查看序列信息

可以通过两种方式查询一个序列的信息:使用CURRVAL函数或使用SELECT语句。 使用CURRVAL函数可以获取序列的当前值,如下:

SELECT CURRVAL('seq');

需要注意的是,在使用标识缓存时,序列的当前值对于不同的会话一般是不同的。如会话1缓存了1到5等5个标识,则会话1调用CURRVAL('seq')将可能返回1,此时会话2调用CURRVAL('seq')则会返回6。

在神通数据库中,一个序列对应一个表,因此也可以通过SELECT语句查看序列的详细定义,如:

SELECT * FROM seq;

返回结果中将包含9个列,其名称及含义如下:

  1. NAME:序列名称
  2. INITVALUE:序列初始值
  3. LASTVALUE:序列缓存中最后一个值,CACHE 为 1 时等于序列当前值
  4. INCREMENT:序列递增值
  5. MINVALUE:序列最小值
  6. MAXVALUE:序列最大值
  7. CACHE:缓存标识个数,缺省时是 1,即不进行预分配
  8. CYCLE:是否循环使用标识值
  9. ISCALLED:序列创建之后是否曾被访问

示例:查看序列信息

--  清理环境
DROP SEQUENCE seq CASCADE;
-- 创建序列
CREATE SEQUENCE seq START WITH 10 INCREMENT BY 2 MAXVALUE 100 MINVALUE 5 CYCLE NO CACHE;
-- 未初始化序列,此时查询当前值会报错
SELECT CURRVAL('seq');
ERROR, 当前SESSION还没有得到序列的当前值, 请先调用nextval或者setval,序列名为SEQ


-- 查看序列信息
SELECT * FROM seq;
NAME(name)      |INITVALUE(bigint)      |LASTVALUE(bigint)      |INCREMENT(bigint)      |MINVALUE(bigint)      |MAXVALUE(bigint)      |CACHE(bigint)      |CYCLE(int)      |ISCALLED(int)      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SEQ             |10                     |10                     |2                      |5                     |100                   |1                  |1               |0                  |
总数目:1

-- 使用 SETVAL 初始化序列
SELECT SETVAL('seq', 25);
SETVAL(bigint)      |
--------------------
25                  |
总数目:1

SELECT CURRVAL('seq');
CURRVAL(bigint)      |
---------------------
25                   |
总数目:1

SELECT * FROM seq;
NAME(name)      |INITVALUE(bigint)      |LASTVALUE(bigint)      |INCREMENT(bigint)      |MINVALUE(bigint)      |MAXVALUE(bigint)      |CACHE(bigint)      |CYCLE(int)      |ISCALLED(int)      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SEQ             |10                     |25                     |2                      |5                     |100                   |1                  |1               |1                  |
总数目:1


SELECT NEXTVAL('seq');
NEXTVAL(bigint)      |
---------------------
27                   |
总数目:1

SELECT CURRVAL('seq');
CURRVAL(bigint)      |
---------------------
27                   |
总数目:1

SELECT * FROM seq;
NAME(name)      |INITVALUE(bigint)      |LASTVALUE(bigint)      |INCREMENT(bigint)      |MINVALUE(bigint)      |MAXVALUE(bigint)      |CACHE(bigint)      |CYCLE(int)      |ISCALLED(int)      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SEQ             |10                     |27                     |2                      |5                     |100                   |1                  |1               |1                  |
总数目:1

DROP SEQUENCE seq;