oracle同步sequence

来源:互联网 发布:移动工作站笔记本知乎 编辑:程序博客网 时间:2024/06/05 09:39
create or replace procedure p_update_sequence(                   i_sequence_name in varchar2,                   i_table_name in varchar2,                   i_id_column in varchar2            ) is    v_sql varchar2(2000);    v_max_id number;    v_diff number;  begin    v_sql := 'select max(' || i_id_column || ') from ' || i_table_name;    execute immediate v_sql into v_max_id;    v_sql := 'select ' || v_max_id || ' - ' || i_sequence_name || '.nextval from dual';    execute immediate v_sql into v_diff;    if v_diff <= 0 then      return;    end if;    v_sql := 'alter sequence ' || i_sequence_name || ' increment by ' || v_diff;    execute immediate v_sql;    v_sql := 'select ' || i_sequence_name || '.nextval from dual';    execute immediate v_sql into v_diff;    v_sql := 'alter sequence ' || i_sequence_name || ' increment by 1';    execute immediate v_sql;  end p_update_wf_sequence;