2009年4月7日 星期二

[Oracle] 如何使用流水號

比起 MS SQL Server 或是 MySQL,Oracle 使用流水號可以說是相當麻煩阿.......

怎麼說呢?

因為 int 欄位無法直接透過遞增的方式產生流水號,而是必須使用 sequence 搭配 trigger 來進行

因此整個過程必須分為三個步驟:
  1. 建立 table

  2. 建立 sequence,用來取得新的遞增值

  3. 建立 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;

沒有留言:

張貼留言