1.情景展示
當我們將數據導入到表中后,為了避免后續數據插入失敗,一般情況下,會更改此表使用的序列的開始值。
如何修改?
2.原因分析
使用Navicat的話,是無法對序列的當前值,進行修改的。

小編為大家整理了3種實現方式,一起來看下吧。
3.解決方案
方式一:使用plsql;
打開plsql,找到sequences

找到要修改的序列--》右鍵--》編輯--》更改:下一個數字的值即可。

方式二:重建序列;
錯誤方式:

具體步驟是:刪除原來的序列,重新創建。
-- 刪除序列
DROP SEQUENCE SEQ_META_DATABASE;
-- 重建序列
CREATE SEQUENCE SEQ_META_DATABASE
minvalue 1
maxvalue 9999999999999999999
INCREMENT BY 1
START WITH 20;
其中,start with 后面跟的就是起始值(下次調用此序列時,將會出現的值) 。
方式三:使用sql。
這一個,是本文的重點;
我們由方式一可以知道:通過plsql的可視化操作界面,是可以修改的。
那plsql到底是怎么實現的?一起來看下:
選中序列--》右鍵--》編輯

第一步:修改起始值;
第二步:點擊右下角的“查看SQL”。

說明:
起初,這里的起始值是300,我給它改成了30,實現的效果就是:
將序列的下一個值改成了30,以后序列將會從30往后疊加。
然后,看下面這張圖,要實現序列起始值的修改,需要3步。

第一步:更改序列的步長;
alter sequence SEQ_META_THEME_TABLE increment by -271 nocache;
我們需要明白一個前提:
序列的值是怎么來的?
當前值+步長(增量)
所以,我們想要修改序列的當前值,就必須自改序列的增量。
第二步:查詢序列值;
select SEQ_META_THEME_TABLE.nextval from dual;
這一步的目的是:改變序列的當前值,讓其按照自己預設的增量來完成序列當前值的修改工作。
到這一步,該序列返回的當前值已經改成了300-271=29(下次調用將會返回30)。
第三步:將序列的增量改成1。
alter sequence SEQ_META_THEME_TABLE increment by 1 cache 20;
-- Modify the last number
alter sequence SEQ_META_THEME_TABLE increment by -271 nocache;
select SEQ_META_THEME_TABLE.nextval from dual;
alter sequence SEQ_META_THEME_TABLE increment by 1 cache 20;
不信?我們把SQL復制出來,執行一下。

把序列值變大(30-->300)

關於增量的計算:
如果更改后值(afterNum)>現在序列的下一個值(nextNum),增量(step)=afterNum - nextNum;
如果更改后值(afterNum)<現在序列的下一個值(nextNum),增量(step)=afterNum - nextNum - 1;
2022年6月16日15:56:13
4.拓展
plsql快速創建序列
找到Sequences窗口;

設置序列名稱,通常以SEQ_開頭;

其它不用填,全部使用默認值即可;
點擊“應用”。

