How do I reset a sequence in Oracle?

后端 未结 18 1484
天命终不由人
天命终不由人 2020-11-22 05:09

In PostgreSQL, I can do something like this:

ALTER SEQUENCE serial RESTART WITH 0;

Is there an Oracle equivalent?

18条回答
  •  余生分开走
    2020-11-22 05:32

    Stored procedure that worked for me

    create or replace
    procedure reset_sequence( p_seq_name in varchar2, tablename in varchar2 )
    is
        l_val number;
        maxvalueid number;
    begin
        execute immediate 'select ' || p_seq_name || '.nextval from dual' INTO l_val;
        execute immediate 'select max(id) from ' || tablename INTO maxvalueid;
        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 '|| maxvalueid ||' 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;
    

    How to use the stored procedure:

    execute reset_sequence('company_sequence','company');
    

提交回复
热议问题