如何在Oracle中重置序列?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

PostgreSQL中,我可以这样做:

ALTER SEQUENCE serial RESTART WITH 0;

有没有在Oracle相当的东西?

提问于
用户回答回答于

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;
/
用户回答回答于

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

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

也就是说,如果你的序列是500,你可以将它设置为100

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

扫码关注云+社区