我正试图找到一种方法来知道在oracle sql中给定序列的值的开始。 有没有办法做到这一点?如何找到一个db序列的值的开始
此外,我想列出所有以低于目前的最高值
select object_name.NEXTVAL
from DUAL
where object_name IN
(select object_name from all_objects where object_type like 'SEQUENCE')
但这会导致到语法错误。
我正试图找到一种方法来知道在oracle sql中给定序列的值的开始。 有没有办法做到这一点?如何找到一个db序列的值的开始
此外,我想列出所有以低于目前的最高值
select object_name.NEXTVAL
from DUAL
where object_name IN
(select object_name from all_objects where object_type like 'SEQUENCE')
但这会导致到语法错误。
select sequence_name,
LAST_NUMBER as NEXT_VAL,
MIN_VALUE as START_WITH
from dba_sequences
where sequence_name ='S';
P.S.
从该结果的时候,机会是可能的顺序可能已经被其他进程增加
LAST_NUMBER
如果你的序列与高速缓存> 1定义将是不准确的! (序列会提前生成并缓存以提高性能)因此只能使用NEXT_VAL
来查找它。但即使打印目的,调用NEXT_VAL
也会增加它。
MIN_VALUE
只有在创建时未指定START_WITH
才会等于START_WITH
!并有否找到它的方法,除了检查DDL
。
查询来获取DDL序列:
dbms_metadata.get_ddl('SEQUENCE', 'SEQ_NAME')
如果'start with'意思是在创建序列时为start by子句提供的值,那么不能保证'min_value'等于'start''值,如果相同的值已被指定为“开始”和“最小值”子句,比如说“1”。 'Last_number'(不是'last_number + increment_by')可能表示只有在使用'nocache'子句创建了一个序列时才会返回下一个值,否则这不是序列返回的下一个值 –
@NicholasKrasnov yes , 我错了。我尽可能地编辑了。你可以发布你的信息作为答案,我会删除我的。 –
@NicholasKrasnov可能是通过自动递增序列实现的,直到指定的值 –
首先'DUAL'的没有'object_name'列。你想找到_all_序列的下一个val吗? –