修改 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 number、Best way to reset an Oracle sequence to the next value in an existing column?