怎麼說呢?
因為 int 欄位無法直接透過遞增的方式產生流水號,而是必須使用 sequence 搭配 trigger 來進行
因此整個過程必須分為三個步驟:
- 建立 table
- 建立 sequence,用來取得新的遞增值
- 建立 trigger,在新的資料存入 table 時,將新的遞增值存入 table 中
以下直接用範例來說明:
-- 建立 sequence 作流水號之用
CREATE SEQUENCE seq_user_group
INCREMENT BY 1
START WITH 1
ORDER;
-- 組別
CREATE TABLE user_group (
group_id NUMBER NOT NULL, -- 群組 ID
group_name NVARCHAR2(100), -- 組別名稱
remark NVARCHAR2(200) -- 備註
parent_group_id NUMBER, --父組別 ID
CONSTRAINT pk_user_group PRIMARY KEY(group_id)
);
COMMENT ON TABLE user_group is '組別';
COMMENT ON COLUMN user_group.group_id is '群組 ID';
COMMENT ON COLUMN user_group.group_name is '組別名稱';
COMMENT ON COLUMN user_group.remark is '備註';
-- 建立 trigger 以產生遞增欄位 (for user_group)
CREATE TRIGGER tri_auto_increment_user_group
BEFORE INSERT ON user_group
FOR EACH ROW
BEGIN
SELECT seq_user_group.NEXTVAL INTO :NEW.group_id FROM DUAL;
END;
沒有留言:
張貼留言