修改 Oracle Sequence

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

與 Oracle 相關的文章

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料