開發過程中我們會從其他地方導入數據,有時會不太關注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後,再執行就行了