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

Oracle 自增序列與儲存程序整合:Sequence 進階用法速查

     編輯:Oracle 資料庫基礎

Oracle 無 Identity 欄位(12c 前),實現自增三大法:Sequence + Trigger(最常用)、Sequence 直接在 SQL 呼叫、儲存程序封裝。本文聚焦 Sequence 進階語法與儲存程式整合。

Sequence 完整建立語法

CREATE SEQUENCE salary_seq
  MINVALUE 100
  MAXVALUE 9999999999
  START WITH 560
  INCREMENT BY 1
  CACHE 20;  -- 預存 20 個值於 SGA,高併發效能最佳

在 SQL 中直接使用

INSERT INTO emp (empno, ename, job) VALUES (salary_seq.NEXTVAL, 'LEWIS', 'CLERK');
SELECT salary_seq.CURRVAL FROM dual;  -- 需同 Session 先呼叫過 NEXTVAL

儲存程序封裝取號邏輯

CREATE OR REPLACE PROCEDURE get_next_empno (p_empno OUT NUMBER) AS
BEGIN
  SELECT salary_seq.NEXTVAL INTO p_empno FROM dual;
END;
/

-- 呼叫範例
VARIABLE v_empno NUMBER;
EXEC get_next_empno(:v_empno);
PRINT v_empno;

Sequence 參數修改與刪除

ALTER SEQUENCE salary_seq
  INCREMENT BY 10
  MAXVALUE 10000
  CYCLE
  NOCACHE;

DROP SEQUENCE salary_seq;
  • START WITH 無法 ALTER,需 DROP 重建。
  • CACHE 與 NOCACHE 切換即時生效。

初始化參數影響

SEQUENCE_CACHE_ENTRIES:控制可同時緩存的 Sequence 數量(預設 10/20 視版本)。

效能提示

  • 高併發插入:CACHE 100~1000 + NOORDER(RAC 環境)。
  • 單機低併發:CACHE 20 即可。
  • 避免在觸發器外另行 SELECT ... NEXTVAL 導致雙重遞增。
Sequence 是 Oracle 自增核心,善用 CACHE/ORDER/NOORDER 控制效能與順序保證,儲存程序封裝可統一取號邏輯並便於審計。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved