首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle SEQUENCE 序列完整指南:建立、使用、修改與觸發器自動遞增實戰

     編輯:Oracle 資料庫相關知識

Oracle Sequence 是獨立於資料表的序號產生器,廣泛用於主鍵自動遞增。本文涵蓋建立語法、取值方式、修改刪除、快取機制、觸發器整合實現自動填充主鍵全流程。

1. 建立 Sequence

CREATE SEQUENCE seq_test
  INCREMENT BY 1      -- 每次遞增值
  START WITH 1        -- 起始值
  NOMAXVALUE          -- 無上限
  NOCYCLE             -- 不循環
  CACHE 10;           -- 記憶體預取 10 個值(效能最佳),NOCACHE 避免跳號

關鍵參數說明

參數說明
INCREMENT BY遞增間距,負數為遞減
START WITH首次 NEXTVAL 回傳值
MAXVALUE/NOMAXVALUE上限值/無上限
CYCLE/NOCYCLE達上限後是否從 MINVALUE 重新開始
CACHE/NOCACHE記憶體預取數量/不預取(崩潰不跳號但效能較差)

2. 取得 Sequence 值

-- 當前值(需先呼叫過 NEXTVAL)
SELECT seq_test.CURRVAL FROM DUAL;

-- 下一值(自動遞增並回傳)
SELECT seq_test.NEXTVAL FROM DUAL;

適用場合

  • 無子查詢/快照/視圖的 SELECT 子句
  • INSERT 子查詢、VALUES 子句
  • UPDATE SET 子句

插入實戰

INSERT INTO my_table (id, name) VALUES (seq_test.NEXTVAL, 'sequence 測試');

重要行為

  • 首次 NEXTVAL 回傳 START WITH 值
  • 同一陳述式多次 NEXTVAL 會產生不同值
  • CURRVAL 僅在 Session 已呼叫過 NEXTVAL 後可用
  • CACHE 導致非正常關機時序號跳號

3. 修改與刪除

-- 修改參數(START WITH 不可改,需重建)
ALTER SEQUENCE seq_test MAXVALUE 9999999;

-- 刪除
DROP SEQUENCE seq_test;

4. 實戰:觸發器實現主鍵自動遞增

-- 建立序列
CREATE SEQUENCE seq_id
  MINVALUE 1 MAXVALUE 99999999
  START WITH 1 INCREMENT BY 1
  NOCACHE ORDER;

-- 建立觸發器
CREATE OR REPLACE TRIGGER tri_test_id
BEFORE INSERT ON s_depart
FOR EACH ROW
DECLARE
  nextid NUMBER;
BEGIN
  IF :NEW.departid IS NULL OR :NEW.departid = 0 THEN
    SELECT seq_id.NEXTVAL INTO nextid FROM SYS.DUAL;
    :NEW.departid := nextid;
  END IF;
END tri_test_id;

關鍵語法說明

  • :NEW:新資料列(插入/更新後)
  • :OLD:舊資料列(更新前/刪除)
  • :=:PL/SQL 賦值運算子
  • INTO nextid:查詢結果賦值給區域變數

進階參數

  • SEQUENCE_CACHE_ENTRIES:系統級參數,控制同時可快取的序列數量
  • RAC 環境建議加 ORDER 保證跨節點序號有序

Sequence + 觸發器是 Oracle 實現自動遞增主鍵的標準模式,12c 起可直接使用 GENERATED AS IDENTITY 簡化寫法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved