我正試圖找到一種方法來知道在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嗎? –