Oracle 無原生 Identity/Auto_Increment,標準做法使用 Sequence。
| 場景 | SQL Server (Identity) | Oracle (Sequence) |
|---|---|---|
| 訂單主/明細同步寫入 | 先 INSERT 主檔 → SCOPE_IDENTITY() 取回 ID → INSERT 明細 | 先 seq.NEXTVAL 取得 ID → 主檔明細同步使用,單次往返 |
| 效能 | 需額外往返 | Sequence 緩存機制 (CACHE) 極高效能 |
| 跨表共用編號 | 困難 | 天然支援多表共用同一 Sequence |
CREATE SEQUENCE seq_order_id START WITH 1 INCREMENT BY 1 CACHE 1000;
-- 取號
SELECT seq_order_id.NEXTVAL INTO v_order_id FROM dual;
-- 同步寫入主檔與明細
INSERT INTO order_header (order_id, ...) VALUES (v_order_id, ...);
INSERT INTO order_line (order_id, line_id, ...) VALUES (v_order_id, 1, ...);
上線後新增欄位需執行 DDL,導致 View/Package/Trigger 失效、鎖表風險。預留彈性欄位可規避此問題。
-- 數值型
NUMBER_ATTRIBUTE1 ~ NUMBER_ATTRIBUTE10
-- 字串型
STRING_ATTRIBUTE1 ~ STRING_ATTRIBUTE10
-- 日期型
DATE_ATTRIBUTE1 ~ DATE_ATTRIBUTE10
Oracle 採用列式儲存邏輯:欄位值為 NULL 時不佔用實體空間(僅佔用資料字典中繼資料)。預留大量 NULL 欄位不會造成空間浪費。
當單表欄位超過 100+、資料量達千萬筆,全表掃描 (FTS) 成本極高。
Sequence 解決自增、彈性欄位規避 DDL 風險、垂直分表優化大表存取。三者結合,構建高效能、可維護的 Oracle 資料模型。