我如何在Oracle中重置序列?

11 浏览
0 Comments

我如何在Oracle中重置序列?

在PostgreSQL中,我可以做类似这样的事情:

ALTER SEQUENCE serial RESTART WITH 0;

是否有Oracle的等价物?

admin 更改状态以发布 2023年5月20日
0
0 Comments

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

然而,如果您想将其设置为0,则可以删除并重新创建它。

如果您想将其设置为特定值,则可以将INCREMENT设置为负值并获取下一个值。

也就是说,如果您的序列在500处,则可以通过设置为100 来设置它。

ALTER SEQUENCE serial INCREMENT BY -400;
SELECT serial.NEXTVAL FROM dual;
ALTER SEQUENCE serial INCREMENT BY 1;

0
0 Comments

下面是Oracle大师Tom Kyte提供的一个好的重置任何序列为0的程序。以下链接中的讨论也很不错。

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;
/

从这个页面可以了解到:重置序列值的动态SQL
另一个不错的讨论在这里:如何重置序列?

0