首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle Sequence 序列完整指南:建立、參數、CACHE、CYCLE 與 12c Identity 列

     編輯:Oracle 教學

Oracle Sequence 序列完整指南:建立、參數、CACHE、CYCLE 與 12c Identity 列

Sequence 是 Oracle 提供的獨立編號產生器,不綁定特定表,支援多表共用、自定義遞增邏輯。本文涵蓋完整語法、各參數行為、CACHE 機制、循環序列、修改與刪除,以及 12c 引入的 IDENTITY 列。

完整建立語法

CREATE SEQUENCE seq_name
  [INCREMENT BY n]          -- 步長,預設 1,負數為遞減
  [START WITH n]            -- 起始值,預設 1 (遞增) 或最大值 (遞減)
  [MAXVALUE n | NOMAXVALUE] -- 最大值,預設 10^27
  [MINVALUE n | NOMINVALUE] -- 最小值,預設 1 (遞增) 或 -10^26 (遞減)
  [CYCLE | NOCYCLE]         -- 循環,預設 NOCYCLE
  [CACHE n | NOCACHE];      -- 記憶體預取,預設 CACHE 20

核心參數行為詳解

參數說明預設值
INCREMENT BY正數遞增、負數遞減。不可為 0。1
START WITH第一次 NEXTVAL 回傳值。遞增:1, 遞減:MAXVALUE
MAXVALUE/MINVALUE觸及邊界行為取決於 CYCLE。見上
CYCLE達邊界後重新從另一端開始。NOCYCLE (報錯)
CACHE預先在 SGA 分配號碼段,提升效能。資料庫異常關閉會導致間隙。20

操作函數

  • seq_name.NEXTVAL:取得下一值,序列遞增。
  • seq_name.CURRVAL:取得當前 Session 最後一次 NEXTVAL 的值,不改變序列。
SELECT myseq.NEXTVAL FROM DUAL; -- 1
SELECT myseq.NEXTVAL FROM DUAL; -- 2
SELECT myseq.CURRVAL FROM DUAL; -- 2 (不變)

實戰應用:插入時自動產生主鍵

CREATE TABLE member (
  mid NUMBER PRIMARY KEY,
  name VARCHAR2(50) NOT NULL
);

INSERT INTO member (mid, name) VALUES (myseq.NEXTVAL, '張三豐');
INSERT INTO member (mid, name) VALUES (myseq.NEXTVAL, '張翠山');

特殊序列範例

循環序列:1,3,5,7,9 循環

CREATE SEQUENCE myseq
  START WITH 1 INCREMENT BY 2
  MAXVALUE 10 MINVALUE 1
  CYCLE CACHE 3;

修改序列

ALTER SEQUENCE myseq
  INCREMENT BY 5
  MAXVALUE 1000
  NOCYCLE
  CACHE 50;

注意:START WITH 無法透過 ALTER 修改,需重建。

Oracle 12c Identity 列 (自動編號欄)

標準 SQL 方式,序列隱含於表定義中。

CREATE TABLE mytab (
  mid NUMBER GENERATED BY DEFAULT AS IDENTITY
    (START WITH 1 INCREMENT BY 1 NOCACHE),
  name VARCHAR2(20) NOT NULL,
  CONSTRAINT pk_mytab PRIMARY KEY (mid)
);
  • GENERATED BY DEFAULT:允許手動指定值覆蓋。
  • GENERATED ALWAYS:強制由系統產生,手動插入報錯。
  • 支援所有 Sequence 參數子句。

查詢序列資訊

SELECT sequence_name, min_value, max_value, increment_by, cycle_flag, cache_size, last_number
FROM user_sequences;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved