查看序列信息¶
可以通过两种方式查询一个序列的信息:使用CURRVAL函数或使用SELECT语句。 使用CURRVAL函数可以获取序列的当前值,如下:
SELECT CURRVAL('seq');
需要注意的是,在使用标识缓存时,序列的当前值对于不同的会话一般是不同的。如会话1缓存了1到5等5个标识,则会话1调用CURRVAL('seq')将可能返回1,此时会话2调用CURRVAL('seq')则会返回6。
在神通数据库中,一个序列对应一个表,因此也可以通过SELECT语句查看序列的详细定义,如:
SELECT * FROM seq;
返回结果中将包含9个列,其名称及含义如下:
- NAME:序列名称
- INITVALUE:序列初始值
- LASTVALUE:序列缓存中最后一个值,CACHE 为 1 时等于序列当前值
- INCREMENT:序列递增值
- MINVALUE:序列最小值
- MAXVALUE:序列最大值
- CACHE:缓存标识个数,缺省时是 1,即不进行预分配
- CYCLE:是否循环使用标识值
- 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;