web-dev-qa-db-ja.com

シーケンスを再初期化することは可能ですか

ドロップせずにシーケンス値を再初期化して再作成するにはどうすればよいですか?たとえば、現在のシーケンス値が3の場合、今度は1で再起動したいと思います。

3
Ravi

このスレッド over Stack Overflowには、探している情報があります。主なオプションは2つあります。

  1. シーケンスを削除して再作成する、または

  2. トリックを使用して、トム・カイトの礼儀:

    どちらか 1回限り

    alter sequence seq increment by {minus_the_current_value} minvalue 0;
    

    または、これを定期的に行う必要がある場合は プロシージャを作成 できます。

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