2014-02-19 19 views
1

我正试图找到一种方法来知道在oracle sql中给定序列的值的开始。 有没有办法做到这一点?如何找到一个db序列的值的开始

此外,我想列出所有以低于目前的最高值

select object_name.NEXTVAL 
from DUAL 
where object_name IN 
(select object_name from all_objects where object_type like 'SEQUENCE') 

但这会导致到语法错误。

+0

首先'DUAL'的没有'object_name'列。你想找到_all_序列的下一个val吗? –

回答

2
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') 

Nicholas Krasnov

+0

如果'start with'意思是在创建序列时为start by子句提供的值,那么不能保证'min_value'等于'start''值,如果相同的值已被指定为“开始”和“最小值”子句,比如说“1”。 'Last_number'(不是'last_number + increment_by')可能表示只有在使用'nocache'子句创建了一个序列时才会返回下一个值,否则这不是序列返回的下一个值 –

+0

@NicholasKrasnov yes , 我错了。我尽可能地编辑了。你可以发布你的信息作为答案,我会删除我的。 –

+0

@NicholasKrasnov可能是通过自动递增序列实现的,直到指定的值 –

相关问题