修改 Oracle Sequence

記下來_Matters
·
·
IPFS
·

不同於 MySQL 非常方便的 Auto Increment,Oracle 中必須自己建立及管理 Sequence 來記錄目前 Table 的序號,這篇文章記錄如何透過指令修改 Oracle Sequence。

原文連結:修改 Oracle Sequence

小蛙需要修改一個既有的 Sequence,之前差一些些的話,可以偷懶直接透過 .nextval 取得下一個 sequence 達到調整的效果

SELECT XXX_SEQ.nextval FROM DUAL;

但這次要調整三萬多個序號就沒辦法這樣做了,透過 Oracle SQL Developer 修改的話又跳出嚇人的警告畫面,因此還是乖乖採取保守方式來調整。

目錄

修改 INCREMENT

Oracle 的 Sequence 運作會有一個遞增量 (increment),小蛙遇到的狀況需要一次調整 30000,以下指令可以先將該 sequence 的遞增量修改成 30000,也就是每一次觸發 nextval 就會增加 30000。

ALTER SEQUENCE XXX_SEQ INCREMENT BY 30000;

取得下一個號碼

透過 .nextval 取得下一個號碼,可以發現假設原本序號是 30,遞增量是 1,那 .nextval 就會是 31;我們把遞增量改成 30000 之後,原本序號是 31,取得 .nextval 時就會得到 30031。

SELECT XXX_SEQ.nextval FROM DUAL;

恢復 INCREMENT

最後把遞增量改回 1 就完成了。

ALTER SEQUENCE XXX_SEQ INCREMENT BY 1;

可以透過以下語法看到目前 Sequence 的 last_number 是多少

SELECT last_number FROM user_sequences WHERE sequence_name = ‘XXX_SEQ’;

參考資料:修改Oracle Sequence的last numberBest way to reset an Oracle sequence to the next value in an existing column?

作者保留所有权利

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!