如何在Oracle中获取序列的最后使用最大值?
如何直接查看共用序列的最后使用值
针对你两张表共用序列seq1的场景,直接查询数据库的序列元数据视图是最可靠的方案——不要依赖表主键的最大值,因为序列是独立于表存在的:比如插入数据后回滚,表的最大值不会更新,但序列的nextval已经消耗了,这时候表的最大值会和序列实际值不一致。
以下是主流数据库的具体查询方法:
Oracle数据库
- 如果要查看序列的最后分配值,优先查询数据字典视图:
注意:如果序列设置了SELECT last_number FROM user_sequences WHERE sequence_name = 'SEQ1';CACHE(缓存),last_number会显示下一批缓存的起始值,而非实际最后使用的值。这种情况下,若当前会话已经调用过seq1.nextval,可以直接查当前会话的序列当前值:
如果当前会话没调用过SELECT seq1.currval FROM dual;nextval,又不想消耗序列值,可以用管理员权限查询v$sequence视图:SELECT current_value FROM v$sequence WHERE sequence_name = 'SEQ1';
PostgreSQL数据库
- 直接查询序列的最后生成值,无需提前调用
nextval:
若要查看当前会话的序列当前值,用:SELECT last_value FROM seq1;SELECT currval('seq1');
SQL Server(2012及以上版本)
- 查询序列的当前值:
SELECT current_value FROM sys.sequences WHERE name = 'seq1';
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

