是否可以重新初始化序列

Rav*_*avi 4 oracle sequence

如何重新初始化序列值而不删除并重新创建它们例如当前序列值是3,现在我想再次用1重新启动它。

mrd*_*nny 6

Stack Overflow 上的这个线程包含您正在寻找的信息。有两个主要选项:

  1. 删除序列并重新创建它,或者

  2. 使用技巧,由 Tom Kyte 提供:

    要么是一次性的

    alter sequence seq increment by {minus_the_current_value} minvalue 0;
    
    Run Code Online (Sandbox Code Playgroud)

    或者,如果您需要定期执行此操作,您可以创建一个程序

    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;
    /
    
    Run Code Online (Sandbox Code Playgroud)