如何从Sybase ASA系统表/视图获取序列当前值
Sybase ASA无需调用nextval获取序列当前值的方法
你遇到的currval报错是正常设计:currval是会话级属性,仅当前会话调用过对应序列的nextval之后才会初始化,未调用过就查询会触发该报错。不需要调用nextval的话可以通过系统视图或系统存储过程直接查询全局最新的序列当前值:
方法1:查询SYS.SYSSEQUENCE系统视图
执行如下SQL即可直接拿到指定序列的当前值,不受会话限制:
SELECT current_value FROM SYS.SYSSEQUENCE WHERE seq_name = 'test_seq1';
该视图相关字段说明:
current_value:序列全局最新的当前值,你示例中刚创建完序列查询该字段会返回5increment:序列步长,对应你创建语句里的INCREMENT BY配置start_with:序列初始值,对应你创建语句里的START WITH配置
方法2:调用sa_get_sequence_value系统存储过程(适用于ASA 12及以上版本)
如果需要更灵活的调用方式,可以用系统存储过程,第二个参数传0时不会消耗序列值,直接返回当前全局值:
CALL sa_get_sequence_value('test_seq1', 0);
注意事项
以上两种方法拿到的是全局维度的序列最新值,若查询瞬间有其他会话调用了该序列的nextval,查询结果和实际值可能存在毫秒级误差。如果需要获取当前会话生成的序列值,还是需要先调用nextval再用currval获取。
内容的提问来源于stack exchange,提问作者AlexR87
相关产品推荐
相关产品推荐

