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後,再執行就行了

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