建立語法與參數詳解
CREATE SEQUENCE seq_name
[INCREMENT BY n] -- 步長,預設 1,負值為遞減
[START WITH n] -- 初始值,預設 1
[{MAXVALUE n | NOMAXVALUE}] -- 最大值,遞增預設 10^27
[{MINVALUE n | NOMINVALUE}] -- 最小值,遞減預設 -10^26
[{CYCLE | NOCYCLE}] -- 循環/不循環,預設 NOCYCLE
[{CACHE n | NOCACHE}]; -- 記憶體預取,預設 20
參數行為對照
| 參數 | 遞增序列 | 遞減序列 |
| MAXVALUE | 上限 | 循環時的最大值 |
| MINVALUE | 循環時的最小值 | 下限 |
| CYCLE | 達 MAXVALUE 回 MINVALUE | 達 MINVALUE 回 MAXVALUE |
常用操作
- 取得下一值:
seq_name.NEXTVAL(每呼叫一次遞增)
- 查看當前值:
seq_name.CURRVAL(需先在 Session 呼叫過 NEXTVAL)
- 修改序列:
ALTER SEQUENCE seq_name INCREMENT BY 5 MAXVALUE 999999;(START WITH 不可改)
- 刪除序列:
DROP SEQUENCE seq_name;
實戰範例
CREATE SEQUENCE abc_seq
INCREMENT BY 1
START WITH 10
MAXVALUE 9999999
NOCYCLE
NOCACHE;
-- 產生 10, 11, 12... 至 9999999 後報錯
效能與陷阱
CACHE 可減少字典查詢,但實例崩潰會導致快取值遺失(間隙)。
NOCACHE 保證無間隙但效能較差。
- 觸發器中使用
:NEW.id := seq.NEXTVAL 時,若觸發器因錯誤回滾,序號仍消耗。
- 12c 引入
IDENTITY 欄位,可簡化主鍵自動產生,底層仍用 Sequence。