oracle sequence 序列滞后 批量设置

开发过程中我们会从其他地方导入数据,有时会不太关注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后,再执行就行了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章