首页 > 数据库 > > 函数和操作符-SEQUENCE函数
序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。
描述:递增序列并返回新值。
说明:返回类型:bigint
nextval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下:
示例1:
select nextval('seqDemo');
nextval
---------
2
(1 row)
示例2:
select seqDemo.nextval;
nextval
---------
2
(1 row)
返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features为true之后,才能使用这个函数。同时在设置enable_beta_features为true之后,nextval()函数将不支持下推。
返回类型:bigint
currval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下:
示例1:
select currval('seq1');
currval
---------
2
(1 row)
示例2:
描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。
需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features或者lastval_supported为true之后,才能使用这个函数。同时这种情况下,nextval()函数将不支持下推。
返回类型:bigint
示例:
select lastval();
lastval
---------
2
(1 row)描述:设置序列的当前数值。
返回类型:bigint
示例:
select setval('seqDemo',1);
setval
--------
1
(1 row)
描述:设置序列的当前数值以及is_called标志。
返回类型:bigint
示例:
select setval('seqDemo',1,true);
setval
--------
1
(1 row)
说明:Setval后当前会话及GTM上会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。
因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3165247/ ,如需转载,请注明出处,否则将追究法律责任。