是否有一条 SQL 指令来检索不递增序列的值。
Thanks.
编辑和结论
正如 Justin Cave 所说,尝试“保存”序列号是没有用的,所以
select a_seq.nextval from dual;
足以检查序列值。
我仍然认为奥利的答案是好的,因为它回答了最初的问题。但如果你想这样做的话,问问自己是否有必要不修改序列。
SELECT last_number
FROM all_sequences
WHERE sequence_owner = '<sequence owner>'
AND sequence_name = '<sequence_name>';
您可以从以下位置获取各种序列元数据user_sequences
, all_sequences
and dba_sequences
.
这些视图跨会话起作用。
EDIT:
如果序列位于您的默认架构中,则:
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
另外,您可能希望将缓存设置为NOCACHE
在重置之前,然后返回到其原始值,以确保您没有缓存大量值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)