首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不增加的情况下检索oracle序列的当前值?

如何在不增加的情况下检索oracle序列的当前值?
EN

Stack Overflow用户
提问于 2012-04-18 21:20:58
回答 7查看 537.9K关注 0票数 178

是否有SQL指令来检索不递增的序列的值。

谢谢。

编辑和结论

正如Justin Cave所说,尝试“保存”序列号是没有用的,因此

代码语言:javascript
复制
select a_seq.nextval from dual;

足够好来检查序列值。

我仍然保留Ollie answer作为好答案,因为它回答了最初的问题。但是问问你自己,如果你想要修改序列,那么不修改序列的必要性。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-04-18 21:22:40

代码语言:javascript
复制
SELECT last_number
  FROM all_sequences
 WHERE sequence_owner = '<sequence owner>'
   AND sequence_name = '<sequence_name>';

您可以从user_sequencesall_sequencesdba_sequences获取各种序列元数据。

这些视图可以跨会话工作。

编辑:

如果序列在您的默认模式中,则:

代码语言:javascript
复制
SELECT last_number
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

如果你想要所有的元数据,那么:

代码语言:javascript
复制
SELECT *
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

希望这能帮上忙。

EDIT2:

如果缓存大小不是1,一种更可靠的方法是:

代码语言:javascript
复制
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.

只需注意,如果其他人在这段时间内使用序列-他们(或您)可能会得到

代码语言:javascript
复制
ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated

此外,您可能希望在重置之前将缓存设置为NOCACHE,然后将其设置回原始值,以确保您没有缓存大量的值。

票数 189
EN

Stack Overflow用户

发布于 2012-04-18 21:23:12

select MY_SEQ_NAME.currval from DUAL;

请记住,只有在当前会话中运行select MY_SEQ_NAME.nextval from DUAL;时,它才会起作用。

票数 136
EN

Stack Overflow用户

发布于 2020-09-17 21:15:21

下面是常用的用法:

代码语言:javascript
复制
select field_SQ.nextval from dual;  -- it will increase the value by 1 for each run
select field_SQ.currval from DUAL;

然而,下面的代码能够将序列更改为您所期望的。1可以是整数(负数或正数)

代码语言:javascript
复制
alter sequence field_SQ increment by 1 minvalue 0
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10210273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档