是否有一条 SQL 指令来检索不增加它的序列的值。
谢谢。
编辑和结论
正如贾斯汀洞穴所说,尝试“保存”序列号没有用,所以
select a_seq.nextval from dual;
足以检查序列值。
我仍然保持 Ollie 的回答是好的,因为它回答了最初的问题。但是如果你想这样做,问问自己不修改序列的必要性。
SELECT last_number FROM all_sequences WHERE sequence_owner = '<sequence owner>' AND sequence_name = '<sequence_name>';
user_sequences您可以从和获取各种序列元all_sequences数据dba_sequences。
user_sequences
all_sequences
dba_sequences
这些视图跨会话工作。
编辑:
如果序列在您的默认架构中,则:
SELECT last_number FROM user_sequences WHERE sequence_name = '<sequence_name>';
如果您想要所有元数据,那么:
SELECT * FROM user_sequences WHERE sequence_name = '<sequence_name>';
希望能帮助到你…
编辑2:
如果您的缓存大小不是 1,那么一种更可靠的方法是:
SELECT increment_by I FROM user_sequences WHERE sequence_name = 'SEQ'; I ------- 1 SELECT seq.nextval S FROM dual; S ------- 1234 -- Set the sequence to decrement by -- the same as its original increment ALTER SEQUENCE seq INCREMENT BY -1; Sequence altered. SELECT seq.nextval S FROM dual; S ------- 1233 -- Reset the sequence to its original increment ALTER SEQUENCE seq INCREMENT BY 1; Sequence altered.
请注意,如果其他人在此期间使用该序列 - 他们(或您)可能会得到
ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated
此外,您可能希望NOCACHE在重置之前将缓存设置为,然后再将其恢复为原始值,以确保您没有缓存很多值。
NOCACHE