如何每天重新设定SEQUENCE,使序列号从1开始

解决方案 »

  1.   

    --创建PRO每天处理一下. 
    create or replace procedure seq_reset(v_seqname in varchar2) as
      n    number(10);
      tsql varchar2(100);
    begin
      execute immediate 'select ' || v_seqname || '.nextval from dual' into n;
      n    := - (n - 1);
      tsql := 'alter sequence ' || v_seqname || ' increment by ' || n;
      execute immediate tsql;
      execute immediate 'select ' || v_seqname || '.nextval from dual' into n;
      tsql := 'alter sequence ' || v_seqname ||' increment by 1';
      execute immediate tsql;
    end seq_reset;
      

  2.   

    --创建PRO 
    create or replace procedure seq_reset(v_seqname in varchar2) as
      n    number(10);
      tsql varchar2(100);
    begin
      execute immediate 'select ' || v_seqname || '.nextval from dual' into n;
      n    := - (n - 1);
      tsql := 'alter sequence ' || v_seqname || ' increment by ' || n;
      execute immediate tsql;
      execute immediate 'select ' || v_seqname || '.nextval from dual' into n;
      tsql := 'alter sequence ' || v_seqname ||' increment by 1';
      execute immediate tsql;
    end seq_reset;
      

  3.   

    可以设置定时任务,每日0点触发,先drop,再create, 用动态sql之execute 应该可以实现
      

  4.   


    需要在其前后加上dbms_lock