frn*_*rno 143 sql oracle sequence
是否有SQL指令来检索不增加它的序列的值.
谢谢.
编辑和结论
正如Justin Cave所说,尝试"保存"序列号是没有用的
select a_seq.nextval from dual;
Run Code Online (Sandbox Code Playgroud)
足以检查序列值.
我仍然保持奥利的答案是好的,因为它回答了最初的问题.但要问问自己,如果你想做的话,不要修改序列的必要性.
Oll*_*lie 161
SELECT last_number
  FROM all_sequences
 WHERE sequence_owner = '<sequence owner>'
   AND sequence_name = '<sequence_name>';
Run Code Online (Sandbox Code Playgroud)
你可以得到各种从序列的元数据user_sequences,all_sequences和dba_sequences.
这些视图适用于各个会话.
编辑:
如果序列在您的默认架构中,则:
SELECT last_number
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';
Run Code Online (Sandbox Code Playgroud)
如果您想要所有元数据,那么:
SELECT *
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你...
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.
Run Code Online (Sandbox Code Playgroud)
请注意,如果其他人在此期间使用序列 - 他们(或您)可能会得到
ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated
Run Code Online (Sandbox Code Playgroud)
此外,您可能希望NOCACHE在重置之前将缓存设置为,然后再将其恢复为原始值,以确保您没有缓存大量值.
Ron*_*onK 115
select MY_SEQ_NAME.currval from DUAL;
请记住,只有select MY_SEQ_NAME.nextval from DUAL;在当前会话中运行它才有效.
cao*_*aot 10
经常使用以下内容:
select field_SQ.nextval from dual;  -- it will increase the value by 1 for each run
select field_SQ.currval from DUAL;
Run Code Online (Sandbox Code Playgroud)
但是,以下内容可以将顺序更改为您所期望的。可以1是整数(负数或正数)
alter sequence field_SQ increment by 1 minvalue 0
Run Code Online (Sandbox Code Playgroud)