Oracle 修改序列的當前值的3種方式


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_開頭;

其它不用填,全部使用默認值即可;

點擊“應用”。

 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM