是否有SQL指令来检索不递增的序列的值。
谢谢。
编辑和结论
正如Justin Cave所说,尝试“保存”序列号是没有用的,因此
select a_seq.nextval from dual;
足够好来检查序列值。
我仍然保留Ollie answer作为好答案,因为它回答了最初的问题。但是问问你自己,如果你想要修改序列,那么不修改序列的必要性。
发布于 2012-04-18 21:22:40
SELECT last_number
FROM all_sequences
WHERE sequence_owner = '<sequence owner>'
AND sequence_name = '<sequence_name>';
您可以从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>';
希望这能帮上忙。
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
,然后将其设置回原始值,以确保您没有缓存大量的值。
发布于 2012-04-18 21:23:12
select MY_SEQ_NAME.currval from DUAL;
请记住,只有在当前会话中运行select MY_SEQ_NAME.nextval from DUAL;
时,它才会起作用。
发布于 2020-09-17 21:15:21
下面是常用的用法:
select field_SQ.nextval from dual; -- it will increase the value by 1 for each run
select field_SQ.currval from DUAL;
然而,下面的代码能够将序列更改为您所期望的。1
可以是整数(负数或正数)
alter sequence field_SQ increment by 1 minvalue 0
https://stackoverflow.com/questions/10210273
复制相似问题