2014-02-19 26 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可能是通過自動遞增序列實現的,直到指定的值 –

相關問題