CURRVAL

说明

取当前序列的值。可以使用“序列.CURRVAL”实现该函数。

语法

currval ::=

参数

text_expression

给定的表达式。

返回值

与bigint_expression相同的类型

注解

  • 当创建一个新的序列时,必须使用SETVAL()或NEXTVAL()对当前序列进行初始化,然后才可以使用CURRVAL()取当前序列的值。
  • CURRVAL函数是易变函数,如果和NEXTVAL函数同时出现,并出现其后,会随着NEXTVAL的值改变而改变。

示例

示例1: 使用 CURRVAL 取当前的值

--  清理环境
DROP SEQUENCE seq1;

--  创建序列
CREATE SEQUENCE seq1;


--  使用 CURRVAL 取当前的值
--  未初始化序列,查询报错
SELECT CURRVAL('seq1');
ERROR, 当前SESSION还没有得到序列的当前值, 请先调用nextval或者setval,序列名为SEQ1




--  使用 NEXTVAL 初始化序列
SELECT NEXTVAL('seq1');
NEXTVAL(bigint)      |
---------------------
1                    |
总数目:1


--  使用 CURRVAL 取当前的值
SELECT CURRVAL('seq1');
CURRVAL(bigint)      |
---------------------
1                    |
总数目:1


--  删除序列
DROP SEQUENCE seq1;

示例2: CURRVAL 与 NEXTVAL 在同一语句中

--  清理环境
DROP SEQUENCE seq2;
DROP SEQUENCE seq3;

--  创建序列
CREATE SEQUENCE seq2;


--  CURRVAL 与 NEXTVAL 在同一语句中
--  CURRVAL 在 NEXTVAL 之前,查询报错
SELECT CURRVAL('seq2') AS CURRVAL, NEXTVAL('seq2') AS NEXTVAL;
ERROR, 当前SESSION还没有得到序列的当前值, 请先调用nextval或者setval,序列名为SEQ2



--  删除序列
DROP SEQUENCE seq2;


--  创建序列
CREATE SEQUENCE seq3;



--  CURRVAL 与 NEXTVAL 在同一语句中
--  CURRVAL 在 NEXTVAL 之后,查询成功
SELECT NEXTVAL('seq3') AS NEXTVAL, CURRVAL('seq3') AS CURRVAL;
NEXTVAL(bigint)      |CURRVAL(bigint)      |
------------------------------------------
1                    |1                    |
总数目:1


--  删除序列
DROP SEQUENCE seq3;