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

2022-09-21 14:54:08 字數 2241 閱讀 8696

當我們將資料匯入到表中後,為了避免後續資料插入失敗,一般情況下,會更改此表使用的序列的開始值。

如何修改?

使用n**icat的話,是無法對序列的當前值,進行修改的。

方式一:使用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;

oracle修改序列當前值

很多時候,我們都會用到oracle序列,那麼我們怎麼修改序列的當前值呢?首先我們可以檢視當前序列值是多少,如下 select 序列名.nextval from dual 比方說我現在查出來值是10,那麼我要把當前值改成8,那麼可以這麼改 alter sequence 序列名 increment by...

Oracle 序列 查詢序列的值,修改序列的值

1.序列的語法形式 1 create sequence 序列名 2 increment by n3 start with n4 maxvalue n nomaxvalue 5 minvalue n nominvalue 6 cycle nocycle 7 cache n nocache 序列以 st...

儲存過程 修改當前序列值

在oracle中,序列 sequence 是可以產生一組等間隔的數值的一種生成器。常用來生成表的主鍵或者其他有規律或自增 減的字段值。當前專案是用來生成表的主鍵,由於某些原因,當前的某些序列值小於了對應表的id值,導致繼續使用序列生成id,會造成id重複。所以需要修改當前的序列值,使其大於對應表id...