CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次遞增值(可負數,負數為遞減序列)
START WITH 1 -- 起始值
NOMAXVALUE -- 無最大值(或指定 MAXVALUE 999999)
NOCYCLE -- 不循環(到達極值報錯),CYCLE 則循環
CACHE 10; -- 記憶體預先配置 10 個值,提升效能
| 參數 | 預設值 | 說明 |
|---|---|---|
| INCREMENT BY | 1 | 步長,正數遞增、負數遞減,不可為 0 |
| START WITH | 1 (遞增) / -1 (遞減) | 第一個產生的值 |
| MAXVALUE / NOMAXVALUE | NOMAXVALUE | 遞增序列上限,遞減序列上限固定為 -1 |
| MINVALUE / NOMINVALUE | NOMINVALUE | 遞減序列下限,遞增序列下限固定為 1 |
| CYCLE / NOCYCLE | NOCYCLE | 到達極值後是否循環,循環會重複產生值 |
| CACHE n / NOCACHE | CACHE 20 | 記憶體預取值數量,NOCACHE 逐次讀磁碟 |
| ORDER / NOORDER | NOORDER | RAC 環境下是否保證跨實例全域有序,單實例無影響 |
sequence_name.NEXTVAL:遞增並回傳新值(每次呼叫產生新號碼)sequence_name.CURRVAL:回傳當前 Session 最後一次 NEXTVAL 的值(需先呼叫過 NEXTVAL,否則報 ORA-08002)-- 插入新員工,主鍵自動取號
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (empseq.NEXTVAL, 'LEWIS', 'CLERK', 7902, SYSDATE, 1200, NULL, 20);
-- 查詢剛插入的序列值
SELECT empseq.CURRVAL FROM DUAL;
INSERT ... VALUES (seq.NEXTVAL, seq.NEXTVAL) 會產生兩個不同號碼。SHUTDOWN ABORT)或實例崩潰,記憶體中未使用的快取值遺失,造成序列不連續。嚴格要求連續(如發票號)請用 NOCACHE。ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 1000000
CACHE 20;
不可修改 START WITH,需 DROP 後重建。修改 INCREMENT BY 為負數可將遞增序列改為遞減。
CREATE SEQUENCE 或 CREATE ANY SEQUENCEALTER ANY SEQUENCE / DROP ANY SEQUENCESELECT 權限於序列物件