赞
踩
开发过程中我们会从其他地方导入数据,有时会不太关注id值,导致导入的值大于序列自增的值
以至于会影响到正常使用,因此我们需要将序列增长到合适的位置
例如当前数据库最大的id是1000000
那么我们将所有的序列增长1000000
下面打印出的是执行sql
declare
seq_step number(10):=1; --步进值
seq_distance number(10):=1000000; --增长的差值
seq_name varchar2(64); --序列名
user_name varchar2(16); --用户名
sql_str varchar2(32767); --执行更改的sql语句
user_name varchar2(16):='user_name'; --需要更新序列位置的用户名
cursor seq is select * from dba_sequences where sequence_owner=user_name ;
begin
for cur in seq loop
seq_name:=cur.sequence_name;
sql_str:=sql_str||'alter sequence '|| seq_name ||' increment by '|| seq_distance||';'; --修改序列步进值为增长的差值
sql_str:=sql_str||'select '||seq_name||'.nextval from dual;'; --按差值增长一次
sql_str:=sql_str||'alter sequence '||seq_name||' increment by '|| seq_step||';'; --修改为原来的步进值
end loop;
dbms_output.put_line(sql_str); --打印出需要执行的sql
end;
得到执行sql后,再执行就行了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。