星期五, 11月 14, 2014

Oracle使用自動流水號


平常寫慣了MSSQL的T-SQL語法,
偶爾換到Oracle時老是會打結-.-

T-SQL裡有個很好用的形態叫做identity,
只要將欄位設定成identity後
新增資料時就會自動幫你填入資料的流水號,
但是在Oracle裡並沒有這樣的形態可以指定,
所以來簡單紀錄一下到底怎麼做才能有auto increment的功能~


1. 首先要先創建一個Sequence,就是一個流水號

CREATE SEQUENCE Seq_Sequence; --最簡單的創建方式,沒有做其他特殊的設定

--SELECT Seq_Sequence.NEXTVAL FROM DUAL 

--選擇該SEQUENCE的下筆流水號出來



2. 建立Trigger,讓你的資料在新增時可以自動插入該SEQUENCE的號碼

CREATE OR REPLACE TRIGGER TriggerName  --TraggerName請自行修正
BEFORE INSERT ON TableName             --TableName當然是指定欄位的Table
FOR EACH ROW
BEGIN
IF :new.SRNO IS NULL THEN               --SRNO就是流水號的欄位名稱啦
SELECT Seq_Sequence.nextval INTO :new.SRNO FROM dual;
END IF;
END;


接下來新增資料時就有跟identity一樣的效果啦~

需要注意的是要設定為流水號的欄位,
該欄位請記得不要指定預設值(default value),
我蠢爆去指定了1,
結果每次都出來是1....  Orz

refference:
1. http://fanqiang.chinaunix.net/a2/b2/20010514/10150052_b.html
2. http://proxy.gtn.com.tw/forum/index.php?topic=25.0
3. http://www.techonthenet.com/oracle/sequences.php  有些比較細的文件可以看

沒有留言: