首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Oracle中重置序列?

如何在Oracle中重置序列?
EN

Stack Overflow用户
提问于 2008-09-09 09:36:39
回答 11查看 644K关注 0票数 188

PostgreSQL中,我可以这样做:

代码语言:javascript
复制
ALTER SEQUENCE serial RESTART WITH 0;

是否有与Oracle相当的产品?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-09-18 15:34:52

下面是一个很好的过程,可以将Oracle guru Tom Kyte中的任何序列重置为0。在下面的链接中也有很多关于利弊的讨论。

代码语言:javascript
复制
tkyte@TKYTE901.US.ORACLE.COM> 
create or replace
procedure reset_seq( p_seq_name in varchar2 )
is
    l_val number;
begin
    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by -' || l_val || 
                                                          ' minvalue 0';

    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
end;
/

在此页面中:Dynamic SQL to reset sequence value

另一个很好的讨论也在这里:How to reset sequences?

票数 162
EN

Stack Overflow用户

发布于 2008-09-09 09:46:29

真正的重启是不可能的AFAIK。(如果我错了,请纠正我!)

但是,如果要将其设置为0,则只需删除并重新创建即可。

如果要将其设置为特定值,可以将增量设置为负值并获得下一个值。

也就是说,如果您的序列是500,则可以通过将其设置为100

代码语言:javascript
复制
ALTER SEQUENCE serial INCREMENT BY -400;
SELECT serial.NEXTVAL FROM dual;
ALTER SEQUENCE serial INCREMENT BY 1;
票数 116
EN

Stack Overflow用户

发布于 2010-11-05 02:53:28

以下脚本将序列设置为所需的值:

给定一个新创建的名为PCS_PROJ_KEY_SEQ的序列和表PCS_PROJ:

代码语言:javascript
复制
BEGIN
   DECLARE
      PROJ_KEY_MAX       NUMBER := 0;
      PROJ_KEY_CURRVAL   NUMBER := 0;
   BEGIN

    SELECT MAX (PROJ_KEY) INTO PROJ_KEY_MAX FROM PCS_PROJ;
    EXECUTE IMMEDIATE 'ALTER SEQUENCE PCS_PROJ_KEY_SEQ INCREMENT BY ' || PROJ_KEY_MAX;
    SELECT PCS_PROJ_KEY_SEQ.NEXTVAL INTO PROJ_KEY_CURRVAL FROM DUAL;
    EXECUTE IMMEDIATE 'ALTER SEQUENCE PCS_PROJ_KEY_SEQ INCREMENT BY 1';

END;
END;
/
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51470

复制
相关文章

相似问题

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