在Oracle中使用自动递增列
Oracle 沒有類似 MS-SQL 可以直接修改欄位屬性,設定成自動編號欄位,所以我們必須透過 Sequence 物件的 nextval 方法,取得其下一個值,然後將此值新增至 TABLE 中,製造出有自動編號的效果。
建立Sequence 物件的語法:
CREATE SEQUENCE sequence_name
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;
//建立 Table
Create Table MarsTest(
ID_ NUMBER(10,0) NOT NULL,
Content VARCHAR2(250)
);
//建立 Sequence
1.使用預設值
Create Sequence Seq_MarsTest;
2.使用自訂
Create Sequence Seq_MarsTest
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
调用:
//新增資料
INSERT INTO MarsTest(ID_, Content)
VALUES (Seq_MarsTest.NEXTVAL, 'MarsTest');
從上面的例子,我們也可以發現到,我們是在 INSERT 時,才將 Sequence 與 Table 產生關係,所以 Sequence 不只是提供給特定 Table 使用,也能給其他任一個 Table 共用。
附:
修改序列
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999999999999999999999999
NOCACHE
NOCYCLE;
規則:
>必須為序列的所有者或者擁有ALTER特權
>修改對於以後的序列號生效
>序列必須是被刪除然後重新產生(使所有相關的對象失效,並且失去相應的關聯)
>修改時還要滿足些其他的驗證條件,比如說新的MAXVALUE不可以比現在的序列號低
刪除序列
DROP SEQUENCE dept_deptid_seq;
>必須要是序列的所有者或者有DROP ANY SEQUENCE的權限