適用於 11g 及之前版本,12c+ 仍可使用但建議改用 Identity Column。
CREATE TABLE downloadpope_tab (
id NUMBER NOT NULL,
userid NUMBER NOT NULL,
downid VARCHAR2(60),
upid VARCHAR2(60),
CONSTRAINT pk_downloadpope_tab PRIMARY KEY (id)
);
CREATE SEQUENCE downloadpope_tab_seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 20; -- CACHE 提升高併發效能,預設 20
CREATE OR REPLACE TRIGGER trg_downloadpope_tab_bir
BEFORE INSERT ON downloadpope_tab
FOR EACH ROW
BEGIN
SELECT downloadpope_tab_seq.NEXTVAL
INTO :NEW.id
FROM DUAL;
END;
/
INSERT INTO downloadpope_tab (userid, downid, upid)
VALUES (100123, 'Oracle sql', '54.70');
SELECT * FROM downloadpope_tab;
-- ID 自動產生 1, 2, 3...
CREATE TABLE downloadpope_tab (
id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 CACHE 20),
userid NUMBER NOT NULL,
downid VARCHAR2(60),
upid VARCHAR2(60),
CONSTRAINT pk_downloadpope_tab PRIMARY KEY (id)
);
GENERATED ALWAYS:不可手動指定 ID (插入時省略 ID 欄位)。GENERATED BY DEFAULT ON NULL:允許手動指定,NULL 時自動取序列值 (更彈性)。| 操作 | 指令 |
|---|---|
| 查詢序列目前值 | SELECT downloadpope_tab_seq.CURRVAL FROM DUAL; |
| 手動取得下一值 | SELECT downloadpope_tab_seq.NEXTVAL FROM DUAL; |
| 重設序列 (慎用) | ALTER SEQUENCE downloadpope_tab_seq INCREMENT BY -999; SELECT ...; ALTER SEQUENCE ... INCREMENT BY 1; |
| 刪除表/序列/觸發器 | DROP TABLE downloadpope_tab; DROP SEQUENCE downloadpope_tab_seq; DROP TRIGGER trg_downloadpope_tab_bir; |
CACHE 100~1000 減少序列鎖競爭。ORDER 或 NOORDER 視業務是否需全域有序決定。