是否有一条 SQL 指令来检索不递增序列的值。
谢谢。
编辑和结论
正如 Justin Cave 所说,尝试“保存”序列号是没有用的
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
获取各种序列元数据。
这些 View 跨 session 工作。
编辑:
如果序列位于您的默认架构中,则:
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
,然后再设置回其原始值,以确保您没有缓存大量值。
关于sql - 如何在不增加 Oracle 序列的情况下检索其当前值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210273/