是否有SQL指令来检索不递增的序列值.
谢谢
EDIT AND CONCLUSION
正如贾斯汀·凯夫所说,试图"保存"序列号是没有用的
select a_seq.nextval from dual;
足以判断序列值.
我仍然认为奥利的答案是好的,因为它回答了最初的问题.但是问问自己,如果你想做的话,有没有必要不修改序列.
是否有SQL指令来检索不递增的序列值.
谢谢
EDIT AND CONCLUSION
正如贾斯汀·凯夫所说,试图"保存"序列号是没有用的
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
和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
,然后在重置之后返回其原始值,以确保没有缓存很多值.