赞
踩
-- 增加更新序列存储过程
create or replace procedure update_seq(v_table_name in varchar2, v_seq_name in varchar2) is
-- id最大值
v_max int;
-- 序列当前值
v_seq_val int;
-- 查询id最大值的sql字符串
selectIdMaxStr VARCHAR2 (500) := 'select max(id) from ' || v_table_name;
-- 查询seq下一个值的sql字符串
selectSeqValStr VARCHAR2 (500) :='select ' || v_seq_name || '.NEXTVAL from dual' ;
begin
EXECUTE IMMEDIATE selectIdMaxStr into v_max;
-- 未修改前的序列下一个值
EXECUTE IMMEDIATE selectSeqValStr into v_seq_val;
EXECUTE IMMEDIATE 'alter sequence '|| v_seq_name ||' increment BY '|| (v_max - v_seq_val);
-- 修改后的的序列取下一个值
EXECUTE IMMEDIATE selectSeqValStr into v_seq_val;
-- 修改为原来的1
EXECUTE IMMEDIATE 'alter sequence '|| v_seq_name ||' increment BY 1';
DBMS_OUTPUT.put_line(v_table_name||' 的序列 '||v_seq_name||' 已设置为 '|| v_seq_val);
end update_seq;
/
-- 调用序列
begin
-- 参数 (表名, 序列名)
update_seq('com_script_param','seq_com_script_param');
end;
/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。