SELECT last_number
FROM user_sequences
WHERE sequence_name = '<sequence_name>';
如果您想要所有元数据,那么:
SELECT *
FROM user_sequences
WHERE sequence_name = '<sequence_name>';
希望能帮助到你...
EDIT2:
如果缓存大小不是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
3 回答
我的原始回复事实上是不正确的,我很高兴它被删除了 . 下面的代码将在以下条件下工作:a)您知道没有其他人修改过序列b)您的会话修改了序列 . 在我的情况下,我遇到了一个类似的问题,我在调用一个修改值的过程,我相信这个假设是正确的 .
遗憾的是,如果您没有修改会话中的序列,我相信其他人说NEXTVAL是唯一可行的方法是正确的 .
您可以从
user_sequences
,all_sequences
和dba_sequences
获取各种序列元数据 .这些视图适用于各个会话 .
EDIT:
如果序列在您的默认架构中,则:
如果您想要所有元数据,那么:
希望能帮助到你...
EDIT2:
如果缓存大小不是1,那么可靠的方法是:
请注意,如果其他人在此期间使用序列 - 他们(或您)可能会得到
此外,您可能希望在重置之前将缓存设置为
NOCACHE
,然后再恢复到其原始值,以确保您没有缓存很多值 .select MY_SEQ_NAME.currval from DUAL;
请记住,只有在当前会话中运行
select MY_SEQ_NAME.nextval from DUAL;
时它才有效 .